Xamarin FormsプロジェクトにEntityFrameworkの移行を追加するにはどうすればよいですか?

標準で

XamarinFormsプロジェクトでEF移行を機能させようとしています。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. ダミー(Xamarin Formsプロジェクト)で.NET標準ライブラリ(2.1)を参照しました
  2. 私はインストールMicrosoft.EntityFrameworkCore.SqliteMicrosoft.EntityFrameworkCore.Tools同様にダミーのプロジェクトにnugetパッケージを
  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でコアプロジェクトをセットアップする必要がありますか?しかし、これはどのように機能しますか?最終的に電話で機能するように移行が必要です。

MichalDiviš

Xamarin.EssentialsFileSystem.AppDataDirectoryは、移行を作成しようとしているWindows / Macでは機能しません。

移行を作成するには、次のsqliteデータベースパスを使用します。

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

このパスは相対パスmigrations.db3であり、プロジェクトフォルダーにファイルが作成されます。.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.iOSプロジェクトをXamarin.Formsコードに移行するにはどうすればよいですか?

分類Dev

Xamarin.Forms共有プロジェクトのリソースに画像を追加して、AndroidプロジェクトとiOSプロジェクトの両方で使用できるようにするにはどうすればよいですか?

分類Dev

Xamarin Formsプロジェクトのさまざまなサイズの画像をすばやく作成するにはどうすればよいですか?

分類Dev

Xamarin.Formsプロジェクトで.netstandardのWCFサービスを使用するにはどうすればよいですか?

分類Dev

Xamarin iOSプロジェクトに画像を追加し、Interface Builderで利用できるようにするにはどうすればよいですか?

分類Dev

Xamarin.Forms ProtableプロジェクトにCocosSharpをインストールするにはどうすればよいですか?

分類Dev

BroadcastReceiverを別のプロジェクトXamarinプロジェクトに含めるにはどうすればよいですか?

分類Dev

AndroidデバイスでVisualStudio-Xamarin.Formsプロジェクトをデバッグするにはどうすればよいですか?

分類Dev

Androidプロジェクトのプロパティ(Xamarin Android)でデバッグを有効にするにはどうすればよいですか?

分類Dev

Xamarin.Formsのエントリに背景画像を追加するにはどうすればよいですか?

分類Dev

リップルタッチのクリック可能なフレームをXamarin.Forms2.5に移行するにはどうすればよいですか?

分類Dev

Xamarin.AndroidでのVisualStudioのF#プロジェクトフォルダーの制限を回避するにはどうすればよいですか?

分類Dev

Xamarin.Formsプロジェクトの別のクラスで作成されたインテントでMainActivityにアクセスできるようにするにはどうすればよいですか?

分類Dev

オブジェクトからXamarin.Forms要素の名前を取得するにはどうすればよいですか?

分類Dev

Xamarin.iOSプロジェクトのIPA出力場所を変更するにはどうすればよいですか?

分類Dev

XamarinプロジェクトのAndroidテーマを変更するにはどうすればよいですか?

分類Dev

Visual Studio 2017 15.5.1の時点で、PCLを使用して最小のAndroid KitKat(API 19)をターゲットとするXamarin.Formsプロジェクトを作成するにはどうすればよいですか?

分類Dev

AndroidのXamarin.FormsのNavigationBarの左側にToolbarItemを追加するにはどうすればよいですか?

分類Dev

Xamarin.iOSプロジェクトでGoogleマップを使用するにはどうすればよいですか

分類Dev

Xamarin Formsを使用してiOSプロジェクトのクリック可能なスライダーを作成するにはどうすればよいですか?

分類Dev

接続が解除されたVS / Xamarinプロジェクトを再接続するにはどうすればよいですか?

分類Dev

Xamarin iOSプロジェクトで署名付きアセンブリ(PCL)を使用するにはどうすればよいですか?

分類Dev

Xamarin.Formsのログコントロールのように機能するものを作成するにはどうすればよいですか

分類Dev

Xamarin.formsのCarouselPageでプログラムでページを変更するにはどうすればよいですか?

分類Dev

Xamarin.FormsでPaypalチェックアウトオプションを実装するにはどうすればよいですか?

分類Dev

Xamarin.formsでフロートアクションボタンをPCLプロジェクトフォームコード共有で使用するにはどうすればよいですか?

分類Dev

xamarinフォームアプリでnugetパッケージを古いプロジェクトから新しいプロジェクトにインストールするにはどうすればよいですか?

分類Dev

リストが作成された後、Xamarin Forms ListViewのViewCellプロパティを更新するにはどうすればよいですか?

分類Dev

Xamarin.Formsラベルに改行を追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    既存のXamarin.iOSプロジェクトをXamarin.Formsコードに移行するにはどうすればよいですか?

  2. 2

    Xamarin.Forms共有プロジェクトのリソースに画像を追加して、AndroidプロジェクトとiOSプロジェクトの両方で使用できるようにするにはどうすればよいですか?

  3. 3

    Xamarin Formsプロジェクトのさまざまなサイズの画像をすばやく作成するにはどうすればよいですか?

  4. 4

    Xamarin.Formsプロジェクトで.netstandardのWCFサービスを使用するにはどうすればよいですか?

  5. 5

    Xamarin iOSプロジェクトに画像を追加し、Interface Builderで利用できるようにするにはどうすればよいですか?

  6. 6

    Xamarin.Forms ProtableプロジェクトにCocosSharpをインストールするにはどうすればよいですか?

  7. 7

    BroadcastReceiverを別のプロジェクトXamarinプロジェクトに含めるにはどうすればよいですか?

  8. 8

    AndroidデバイスでVisualStudio-Xamarin.Formsプロジェクトをデバッグするにはどうすればよいですか?

  9. 9

    Androidプロジェクトのプロパティ(Xamarin Android)でデバッグを有効にするにはどうすればよいですか?

  10. 10

    Xamarin.Formsのエントリに背景画像を追加するにはどうすればよいですか?

  11. 11

    リップルタッチのクリック可能なフレームをXamarin.Forms2.5に移行するにはどうすればよいですか?

  12. 12

    Xamarin.AndroidでのVisualStudioのF#プロジェクトフォルダーの制限を回避するにはどうすればよいですか?

  13. 13

    Xamarin.Formsプロジェクトの別のクラスで作成されたインテントでMainActivityにアクセスできるようにするにはどうすればよいですか?

  14. 14

    オブジェクトからXamarin.Forms要素の名前を取得するにはどうすればよいですか?

  15. 15

    Xamarin.iOSプロジェクトのIPA出力場所を変更するにはどうすればよいですか?

  16. 16

    XamarinプロジェクトのAndroidテーマを変更するにはどうすればよいですか?

  17. 17

    Visual Studio 2017 15.5.1の時点で、PCLを使用して最小のAndroid KitKat(API 19)をターゲットとするXamarin.Formsプロジェクトを作成するにはどうすればよいですか?

  18. 18

    AndroidのXamarin.FormsのNavigationBarの左側にToolbarItemを追加するにはどうすればよいですか?

  19. 19

    Xamarin.iOSプロジェクトでGoogleマップを使用するにはどうすればよいですか

  20. 20

    Xamarin Formsを使用してiOSプロジェクトのクリック可能なスライダーを作成するにはどうすればよいですか?

  21. 21

    接続が解除されたVS / Xamarinプロジェクトを再接続するにはどうすればよいですか?

  22. 22

    Xamarin iOSプロジェクトで署名付きアセンブリ(PCL)を使用するにはどうすればよいですか?

  23. 23

    Xamarin.Formsのログコントロールのように機能するものを作成するにはどうすればよいですか

  24. 24

    Xamarin.formsのCarouselPageでプログラムでページを変更するにはどうすればよいですか?

  25. 25

    Xamarin.FormsでPaypalチェックアウトオプションを実装するにはどうすればよいですか?

  26. 26

    Xamarin.formsでフロートアクションボタンをPCLプロジェクトフォームコード共有で使用するにはどうすればよいですか?

  27. 27

    xamarinフォームアプリでnugetパッケージを古いプロジェクトから新しいプロジェクトにインストールするにはどうすればよいですか?

  28. 28

    リストが作成された後、Xamarin Forms ListViewのViewCellプロパティを更新するにはどうすればよいですか?

  29. 29

    Xamarin.Formsラベルに改行を追加するにはどうすればよいですか?

ホットタグ

アーカイブ