Запуск EntityFrameworkCore на Xamarin iOS вызывает исключение инициализатора типа - PullRequest
0 голосов
/ 10 марта 2020

У меня есть проект Xamarin Forms и проект MVC Core с общей библиотекой классов, которая содержит AppDbContext и мои репозитории. При работе на MVC все мои методы Get работают нормально, но на Xamarin Forms iOS я получаю следующую ошибку:

{System.TypeInitializationException: инициализатор типа для Microsoft.Data.SqlClient .TdsParser 'выбросил исключение. ---> System.TypeInitializationException: инициализатор типа для «Microsoft.Data.SqlClient.SNILoadHandle» вызвал исключение. ---> System.DllNotFoundException: сборка sni.dll: тип: member: (null)

Строка, в которой код завершается ошибкой, является последней строкой ниже (в моем OnAppearing):

string connectionString = "user id=test; data source=test.internal.com,3002;initial catalog=testDB;password=test";
AppDbContext context = new AppDbContext(new DbContextOptionsBuilder<AppDbContext>().UseSqlServer(connectionString).Options);
PersonRepository repo = new PersonRepository(context);
var results = await repo.GetAll();

Ранее я использовал Dependency Injection, но я использую вышеупомянутое, чтобы найти проблему. Мой метод GetAll PersonRepository выглядит следующим образом:

public async Task<IEnumerable<Person>> GetAll()
{
    return await context.Person.ToListAsync<Person>();
}

А мой AppDBContext выглядит следующим образом:

public class AppDbContext :DbContext
{
    public DbSet<Person> Person { get; set; }

    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        foreach (var foreignKey in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
        {
            foreignKey.DeleteBehavior = DeleteBehavior.NoAction;
        }
    }
}

Как я уже говорил, этот код работает на MVC, но не на Xamrin iOS. Я использую самые современные нюгеты:

  • EFCore 3.1.2
  • EFCore.SQLServer 3.1.2
  • Общая библиотека классов .NetStandard 2.1
  • Xamarin.Forms 4.5.0.356

Я просмотрел другие посты, но не смог найти ничего, касающегося Xamarin или iOS. Я попытался установить Microsoft.Data.SQLClient и Microsoft.Data.SQLClient.sni в общую папку, но это не помогло решить проблему.

Примечание:

  • Xamarin iOS установлен на No Linking
  • Работает на iOS симуляторе (сейчас не могу попробовать физическое устройство)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...