質問を考えるように!みなさん、こんにちは
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を使用する場合はここで、言っているわけではありません。