我使用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.}
我已将链接器选项设置为“全部链接”,而我读过其他用户的文章,我必须将其设置为“不链接”,但是如果这样做,我将无法为物理设备构建,因为我得到了以下信息错误:
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,但无法解决问题。