如何在Xamarin Forms项目中为Entity Framework添加迁移?

与标准

我正在尝试让EF迁移在Xamarin Forms项目中工作。我有一个SQLite数据库的DbContext:

    public class TestDbContext : DbContext
    {
        public DbSet<Item> Items { get; set; }

        public TestDbContext()
        {
            SQLitePCL.Batteries_V2.Init();

            this.Database.EnsureCreated();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string dbPath = Path.Combine(FileSystem.AppDataDirectory, "testDb.db3");

            optionsBuilder
                .UseSqlite($"Filename={dbPath}");
        }
    }

Microsoft.EntityFrameworkCore.Tools为标准库安装了nuget,但是没有用。从开始这个,我添加了一个虚拟的.NET的核心工程。

  1. 我在Dummy(Xamarin Forms项目)中引用了.NET Standard库(2.1)。
  2. 我也将Microsoft.EntityFrameworkCore.SqliteMicrosoft.EntityFrameworkCore.Toolsnuget软件包安装到了虚拟项目中
  3. IDesignTimeDbContextFactory在.net标准库中实现了这样的代码:
    public class DesignTimeFactory : IDesignTimeDbContextFactory<TestDbContext>
    {
        public TestDbContext CreateDbContext(string[] args)
        {
            return new TestDbContext();
        }
    }

当我运行命令时,PM> Add-Migration InitialCreate -P XamarinEFTest -S EFDummy出现异常:

Build started...
Build succeeded.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> Xamarin.Essentials.NotImplementedInReferenceAssemblyException: This functionality is not implemented in the portable version of this assembly. You should reference the NuGet package from your main application project in order to reference the platform-specific implementation.
   at Xamarin.Essentials.FileSystem.get_PlatformAppDataDirectory()
   at Xamarin.Essentials.FileSystem.get_AppDataDirectory()
   at XamarinEFTest.TestDbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) in C:\Users\szabk\source\repos\XamarinEFTest\XamarinEFTest\XamarinEFTest\TestDbContext.cs:line 24
   at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
   at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance()
   at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService[TService](IInfrastructure`1 accessor)
   at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure`1 accessor)
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.get_Dependencies()
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()
   at XamarinEFTest.TestDbContext..ctor() in C:\Users\szabk\source\repos\XamarinEFTest\XamarinEFTest\XamarinEFTest\TestDbContext.cs:line 19
   at XamarinEFTest.DesignTimeFactory.CreateDbContext(String[] args) in C:\Users\szabk\source\repos\XamarinEFTest\XamarinEFTest\XamarinEFTest\DesignTimeFactory.cs:line 12
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContextFromFactory(Type factory, Type contextType)
   at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.<>c__DisplayClass16_0.<FindContextFactory>b__1()
   at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func`1 factory)
   at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Exception has been thrown by the target of an invocation.

我有VS 2019 16.8.4,我从带有滑块菜单的布局模板创建了测试xamarin项目。

我需要做什么?

编辑:也许我需要使用其他SQLite驱动程序和不同的DesignTimeFactory设置Core项目?但是,这将如何工作?最后,我需要进行迁移才能在电话中工作。

米哈尔·迪维什(MichalDiviš)

Xamarin.EssentialsFileSystem.AppDataDirectory在您要创建迁移的Windows / Mac上不起作用。

使用此sqlite数据库路径创建迁移:

optionsBuilder.UseSqlite($"Data Source=migrations.db3");

此路径是相对路径,最终将migrations.db3在项目文件夹中创建一个文件。只是ignote .db文件,它的唯一目的是创建迁移。

编辑:我一直在我的应用程序中使用此DbContext,它工作得很好。

public class MyDbContext : DbContext
{
    private string _databasePath;

    public DbSet<MyEntity> Issues { get; set; }

    [Obsolete("Don't use this for production. This is only for creating migrations.")]
    public MyDbContext() : this("nothing.db")
    {

    }

    public MyDbContext(string dbPath)
    {
        _databasePath = dbPath;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlite($"Data Source={_databasePath}");
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xamarin Forms的列表视图中的多个项目中添加图像单元格

来自分类Dev

如何在Xamarin Forms的列表视图中的多个项目中添加图像单元格

来自分类Dev

如何执行Entity Framework Core项目并从nuget提示符在Visual Studio 2015中添加迁移?

来自分类Dev

如何在Xamarin.Forms Protable项目中安装CocosSharp?

来自分类Dev

拆分项目时无法添加Entity Framework迁移

来自分类Dev

如何在同一项目中使用2个不同的数据库架构组织Entity Framework Core迁移(代码优先)?

来自分类Dev

如何在Xamarin的MonoGame项目的Farseer Physics中添加MonoGame.Framework?

来自分类Dev

如何在Xamarin IOS C#的项目中添加设计

来自分类Dev

如何在C#Xamarin iOS项目中添加ios框架?

来自分类Dev

如何使用Entity Framework 6 Code First迁移创建初始数据行并将其添加到新表

来自分类Dev

如何在Entity Framework 6.0中禁用迁移

来自分类Dev

如何在Entity Framework项目中将表数据转换为Excel格式?

来自分类Dev

如何在Xamarin Forms中的条目上添加视觉前缀?

来自分类Dev

Xamarin.Forms如何在代码中添加行为

来自分类Dev

从另一个项目添加库后,Xamarin.Forms项目中断

来自分类Dev

如何设置Entity Framework Core迁移超时?

来自分类Dev

如何在SBT项目中添加示例?

来自分类Dev

如何在gradle项目中添加JAR?

来自分类Dev

如何在我的项目中添加梨

来自分类Dev

如何在laravel项目中添加OwlCarousel?

来自分类Dev

如何在Django项目中添加图像

来自分类Dev

无法使用Entity Framework和Visual Studio 2015添加迁移

来自分类Dev

Entity Framework Core 2.0 - 添加迁移不起作用

来自分类Dev

如何在NUnit Library项目中使用Xamarin.Forms?

来自分类Dev

如何在NUnit Library项目中使用Xamarin.Forms?

来自分类Dev

如何在Xamarin.Forms便携式项目中使用System.Collections

来自分类Dev

如何在installshield基本MSI项目中的.NET Framework 4.5.2上添加先决条件检查

来自分类Dev

如何在.NET Core项目中引用.NET Framework项目?

来自分类Dev

如何在Xcode项目中将项目添加为模块

Related 相关文章

  1. 1

    如何在Xamarin Forms的列表视图中的多个项目中添加图像单元格

  2. 2

    如何在Xamarin Forms的列表视图中的多个项目中添加图像单元格

  3. 3

    如何执行Entity Framework Core项目并从nuget提示符在Visual Studio 2015中添加迁移?

  4. 4

    如何在Xamarin.Forms Protable项目中安装CocosSharp?

  5. 5

    拆分项目时无法添加Entity Framework迁移

  6. 6

    如何在同一项目中使用2个不同的数据库架构组织Entity Framework Core迁移(代码优先)?

  7. 7

    如何在Xamarin的MonoGame项目的Farseer Physics中添加MonoGame.Framework?

  8. 8

    如何在Xamarin IOS C#的项目中添加设计

  9. 9

    如何在C#Xamarin iOS项目中添加ios框架?

  10. 10

    如何使用Entity Framework 6 Code First迁移创建初始数据行并将其添加到新表

  11. 11

    如何在Entity Framework 6.0中禁用迁移

  12. 12

    如何在Entity Framework项目中将表数据转换为Excel格式?

  13. 13

    如何在Xamarin Forms中的条目上添加视觉前缀?

  14. 14

    Xamarin.Forms如何在代码中添加行为

  15. 15

    从另一个项目添加库后,Xamarin.Forms项目中断

  16. 16

    如何设置Entity Framework Core迁移超时?

  17. 17

    如何在SBT项目中添加示例?

  18. 18

    如何在gradle项目中添加JAR?

  19. 19

    如何在我的项目中添加梨

  20. 20

    如何在laravel项目中添加OwlCarousel?

  21. 21

    如何在Django项目中添加图像

  22. 22

    无法使用Entity Framework和Visual Studio 2015添加迁移

  23. 23

    Entity Framework Core 2.0 - 添加迁移不起作用

  24. 24

    如何在NUnit Library项目中使用Xamarin.Forms?

  25. 25

    如何在NUnit Library项目中使用Xamarin.Forms?

  26. 26

    如何在Xamarin.Forms便携式项目中使用System.Collections

  27. 27

    如何在installshield基本MSI项目中的.NET Framework 4.5.2上添加先决条件检查

  28. 28

    如何在.NET Core项目中引用.NET Framework项目?

  29. 29

    如何在Xcode项目中将项目添加为模块

热门标签

归档