EFCore-3

質問を考えるように!みなさん、こんにちは

EFコア一般的なタスク

データベースのモデル化、現在はEFCoreコードファーストアプローチをサポートしています。

1:データベースとモデルを定義します

最終的なデータベースは、DbContextに従ってモデル化されたT型がテーブルに記録され、DbSet <T>コレクションプロパティの1つまたは複数のタイプを含むクラスから派生し、

パブリック クラスYourDataBase:DbContext 
{ 
   公共 DbSet <顧客>お客様{ 取得しますセット;} 
}

物理的なリレーショナルデータベースの基礎となるのは、顧客という名前のテーブルが必要です。

パブリック クラスEntityBase 
{ 
   パブリックEntityBase()
   { 
       イネーブル = 
       修正 = DateTime.UtcNow。
   } 
   パブリック ブール値 {有効得ますセット;}
    公共のDateTime?Modfied { 取得しますセット;} 
} 
パブリック クラスのお客様:EntityBase 
{ 
 [キー] 
 パブリック int型同上{ GETセット;}
  パブリック 文字列のFirstName { GET; セット;} 
}

データベーススキーマとは、常に同期している必要がありますクラスにマップすることを。そうでなければ、ここでストレス下では、EFコアを使用すると、空にすることができ、テーブルに新しい列を追加しても意味は、問題となる可能性が例外をスローします。一方、クラスのパブリックプロパティは、この場合も、しかし、問題となり得る追加。使用NoMappedプロパティは例外をスローしません。

 

2:接続文字列の注入

この方法は、本明細書生プロバイダがSQL Server.SQLite含む元のメソッドの拡張を提供するサポートされている各々がオプションジェネレータオブジェクトを受け付けるOnConfiguring DbContextクラスをオーバーライドすることができます。

 パブリック クラスSqlServerDbContext:DbContext、IDisposableを
{ 
      保護 オーバーライド ボイドOnConfiguring(DbContextOptionsBuilder optionsBuilder)
        { 
            optionsBuilder.UseSqlServer(のConnectionString)。
        } 
}

しかし、現実には、あなたは、異なる環境(生産、開発、ステージングなど)ごとに異なる文字列を使用する必要があり、このような状況では、あなたは文字列を注入する方法を見つける必要があります。だから、DbContextクラスは、グローバル静的プロパティを追加します

 プライベート 静的の 文字列のConnectionString { 取得しますセット ; }

通常、接続文字列は、構成ファイルから読み取られ、アプリケーションを起動するように設定し

公共の 無効設定(IApplicationBuilderアプリ、IWebHostEnvironment ENV)
{ 
  YourDataBase.ConnectionString =!env.IsDevelopment()?
  プロダクション接続文字列開発の接続文字列
}

3:オブジェクトの注入DbContext

作られた分離株の懸念によると、私はこれをお勧めしません。

ConfigureServicesで

VAR CONNSTRING = Configuration.GetConnectionString(" YourDatabase " ); 
services.AddDbContext <YourDatabase>(オプション=> option.UserSqlServer(CONNSTRING));

4:自動的にデータベースを作成します

データベースがまだ存在しない場合には、いくつかの違いに必要なデータベースのEF6コードを作成します。EFCoreは、明示的にこのステップを要求しなければなりません。自動的にメンバーを着用するデータベース。プロモーターは、クラスの設定に次のコードが必要です

VaRのデシベル= 新しいYourDatabase(); 
db.Database.EnsureCreated():

データベースがまだ存在しない場合。データベースが作成されEnsureCreated、そうでない場合はスキップします。初期データは完全にコードで制御することができるデータベース操作にロードされます。

db.Database.SeedTables();

()呼び出しはEnsureCreated後。

テーブルデータについて。ここで導入されていない、それは非常に基本的なものです。あなたは少しEFを使用する場合はここで、言っているわけではありません。

 

おすすめ

転載: www.cnblogs.com/ccaa/p/12563466.html