コンソールプログラムは非常にきれいですので、独自のが必要なので、データベース構成を完了するために、構成ファイルから読み取ら
1、設定ファイルを読み取ります。
注:(1)プロファイルのプロジェクトディレクトリに自分のappsettings.jsonファイルを確立する必要性、または他のタイプの柔軟ここに対処することができます。
新しい、簡単に更新を修正するために、出力ディレクトリにコピーした場合、ファイルを生成するオプションを覚えて確立した後(2)があります。
/// <要約> /// アプリケーション構成ファイルを初期化する /// </要約> /// <戻り値> </戻り値> パブリック 静的IConfigurationRoot InitConfiguration() { VAR basePathを= Directory.GetCurrentDirectory()。 VAR configBuilder = 新しいConfigurationBuilder() .SetBasePath(basePathを) .AddJsonFile(" appsettings.json "、オプション:偽、reloadOnChange:真) .AddEnvironmentVariables()。 だっ設定= configBuilder.Buildは(); Console.WriteLineを(" プロフィール:" ); Console.WriteLineを(Path.Combine(basePathを、" appsettings.json " )); 戻り値の設定。 }
転送:https://www.cnblogs.com/xiaoyu369/p/9559237.html
図2に示すように、コンフィギュレーションデータベース:
注:(1)データベースを使用して、異なるアプリケーションの要件に応じて構成することができます。
エンティティはアセンブリコンソールでoptions.MigrationAssembly無駄なデータセットと現在のプログラムを使用しているため(2)、組立必要はマイグレーション・コードの実行を指定します。
/// <要約> /// データベース初期設定 /// </要約> /// ます。<param name = "設定"> アプリケーションの設定</ param>の /// <戻り値> </戻り値> パブリック 静的の DbContextOptions <PsyDbContext> InitDatabase(IConfigurationRoot構成) { VARたconnectionString = configuration.GetConnectionString(" PSYDB " ); VAR optionsBuilder = 新しい DbContextOptionsBuilder <PsyDbContext> (); VARのdbType = configuration.GetValue < 整数 >(" DbTypeの" ); スイッチ(のdbType) { ケース 1 : optionsBuilder.UseSqlServer(れたconnectionString、オプション => options.MigrationsAssembly(" EfCoreMigrationTest " )); 休憩; ケース 2 : optionsBuilder.UseMySql(れたconnectionString)。 休憩; デフォルト: optionsBuilder.UseSqlite(れたconnectionString)。 休憩; } VAR dbContextOptions = optionsBuilder.Options。 Console.WriteLineを($ " 数据库[のdbType:{}のdbType]:" )。 Console.WriteLineを(れたconnectionString)。 リターンdbContextOptions。 }
転送:https://www.cnblogs.com/skyfreedom/archive/2019/07/10/11166399.html
3、テストコール:
クラスプログラム { /// <まとめ> /// アプリケーション・コンフィギュレーション・オブジェクト /// </要約> パブリック 静的 IConfigurationRoot構成{ GET ; プライベート SET ;} /// <まとめ> /// データベース・コンフィギュレーション・オブジェクト /// </要約> パブリック 静的 DbContextOptions <PsyDbContext> DbContextOptions { GET ; プライベート SET ;} /// <要約> /// エンティティのコンテキストを取得します。 /// </要約> パブリック 静的 PsyDbContext DbContext => 新しい新しいPsyDbContext(DbContextOptions)。 静的な 非同期タスクのメイン(文字列[] argsを) { // 初期化 設定= InitConfigurationは(); DbContextOptions = InitDatabase(構成); // コードの特定の使用 のvarのUserListは= のawait DbContext.UserInfo.Take(5 ).ToArrayAsyncを(); // 出力 Console.WriteLineを(" 検査データ:" ); Console.WriteLineを(JsonConvert.SerializeObject(ユーザーリスト、Formatting.Indented))。 Console.ReadKey(); } }
4、コンフィギュレーション・ファイル(appsettings.json)内容:
{ "のconnectionStrings" :{ "PSYDB": "データソース= .;初期カタログ= PSYDB;ユーザID =寺;パスワード= 123456;接続タイムアウト= 15" }、 @ データベースの種類:0 - SQLiteの、-SQLServer 1、2:MySQLの "DbTypeの" :. 1 }
5、エンティティのコンテキスト:定義は、ここに記載されている記事、論文、または他のEFコアに2リンクのステップを参照してくださいされていません。
図6に示すように、流暢のAPIエンティティ・クラスを使用して構成されています。
元の親クラスのインターフェイスに:IEntityTypeConfiguration <>
OnModelCreatingメソッドを書き換えるには物理的な構成に覚えることができるEFの元の設定を使用することを続行します。
保護された オーバーライド 無効OnModelCreating(ModelBuilderのModelBuilderの) { ベース.OnModelCreating(ModelBuilderの)。 VAR typesToRegister = Assembly.GetExecutingAssembly()。GetTypes() .Where(トン => t.GetInterface(typeof演算(IEntityTypeConfiguration <>)フルネーム)=。!ヌル)。 foreachの(VARのタイプでtypesToRegister) { 動的 configurationInstance = Activator.CreateInstance(タイプ)。 modelBuilder.ApplyConfiguration(configurationInstance)。 } }
転送:https://www.cnblogs.com/Zhang-Xiang/p/7580899.html
7、物理的な植物カテゴリ:
注:移行コードを生成する必要がある場合は、上記のコードは十分ではありません、あなたは、このようなエンティティタイプの設計ツールすることができます例を容易にするために、実行時にエンティティファクトリクラスを追加する必要があります
/// <まとめ> /// エンティティのコンテキストを作成する設計EFを容易にするための物理的植物系、ツール(移行は初期パッケージコンソールで実行されてもよい:アドイン移行InitialCreate) /// </要約> パブリック クラス PsyDbContextFactory:IDesignTimeDbContextFactory < PsyDbContext> { 公共 PsyDbContext CreateDbContext(文字列[] argsを) { VaRの構成= Program.InitConfiguration()。 VaRのオプション= Program.InitDatabase(コンフィギュレーション)。 返す 新しいPsyDbContext(オプション)。 } }
転送:https://stackoverflow.com/questions/56686093/unable-to-create-an-object-of-type-dbcontext
参考:https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/migrations/
https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/dbcontext-creation
終了8:
これは、コードの準備を行い、Visual Studioのパッケージコンソールにすることができ完了:アドインの移行InitialCreateが確立移行します。
あなたは、コードを移行したくない場合にも、単にファイルを削除することはできません、削除コマンドライン(削除-の移行)を使用することを確認し、そうでない場合は、その後の移行コードできなかった全く正しいです。