Я разработал приложение, используя Xamarin.Forms с .NET Shared Project 2.0.
Приложение Android отлично работает как на симуляторе, так и на физических устройствах, но приложение iOS отлично работает на симуляторе, но не работает на физических устройствах.
Проблема заключается в подключении к базе данных SQLite при создании контекста. Мой контекстный класс выглядит следующим образом:
[Preserve(AllMembers = true)]
public class EmployeesContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
private string _databasePath;
public EmployeesContext()
{
}
public EmployeesContext(string databasePath)
{
_databasePath = databasePath;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Filename={_databasePath}");
}
}
и код, который выдает исключение
public bool DeleteAllEmployees()
{
try
{
using (var db = new EmployeesContext(DbPath))
{
SQLitePCL.Batteries.Init();
db.Database.EnsureCreated();
foreach (Employee e in db.Employees)
{
db.Employees.Remove(e);
Console.WriteLine("deleted employee: " + e.CompanyID);
}
db.SaveChanges();
return true;
}
}
catch (Exception ex)
{
return false;
}
}
когда я инициализирую EmployeesContext.
Сообщение об исключении:
{System.InvalidOperationException: A suitable constructor for type 'Microsoft.EntityFrameworkCore.Internal.DiagnosticsLogger1[Microsoft.EntityFrameworkCore.DbLoggerCategory+Infrastructure]' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.}
У меня есть опция компоновщика "Link All", и я прочитал, что другие пользователи должны установить для этого параметра "Don't Link", но если я сделаю это, я не смогу собрать для физических устройств, потому что получаю следующее ошибка:
Could not AOT the assembly '/Users/apple/Library/Caches/Xamarin/mtbs/builds/My1stAidAppCompany.iOS/6ef11966ebc899886e5f8e58172f085a/obj/iPhone/Debug/mtouch-cache/Build/Microsoft.EntityFrameworkCore.dll'
Я использую Microsoft.EntityFrameworkCore 2.1.0 и sqlite-net-pcl 1.4.118 для доступа к БД.
Я пытался обновить и понизить Microsoft.EntityFrameworkCore, но не смог решить проблему.