Entity Framework Coreでは、EFモデルとエンティティをどのように生成しますか?
ASP.NET Core-Existing Database Microsoftの記事によると、パッケージマネージャーコンソールで次のようなコマンドを実行する必要があります。
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
これにより、インポートするテーブルまたはビューをまったく制御できなくなります。これがデータベースをリバースエンジニアリングし、EF CoreでEFモデルとエンティティを作成する唯一の方法であり、これが完全なEntity Frameworkで何年も行われていた方法と比較した場合、その進捗はどうですか?
Entity Framework Coreでこれを行う方法はありません。こちらのドキュメントをご覧ください: https://docs.Microsoft.com/en-us/ef/efcore-and-ef6/features
私はこの質問が少し古いことを知っていますが、同じ問題につまずく人々にとってはかなり役に立つと思います。
あなたの質問を正しく理解できたら、どのテーブルを生成するかを指定します。コマンドに-Tables
パラメーターを追加すると可能になります。
データベースの3つのテーブルを生成するために使用したコマンドは次のとおりです(パッケージマネージャーコンソールで)。
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;"
-Provider Microsoft.EntityFrameworkCore.SqlServer
-OutputDir Models -Context NorthwndContext
-Tables Products,Categories,Suppliers -Force
ご覧のとおり、私はNorthwnd-Databaseを使用し、「Products、Categories、およびSupplier」テーブルのみを生成します。明らかに、さらにテーブルを追加できます。コンマで区切るだけです。
わからない場合は、データ接続(サーバーエクスプローラー)に移動してDatabaseNameを取得し、追加するデータベースをクリックして、右側(プロパティ)にプロパティ(名前)が表示されます。私にとっては「NORTHWND.MDF」でした。
-Force
を使用して、既に作成したモデルをオーバーライドしました。
-DataAnnotations
を使用して、注釈付きモデルを取得できます。それ以外の場合は、Fluentモデル構成を取得します。
PS:ASP.NET Core 2とEntity Framework Core 2.0.0でのみこれを試しました。
私の状況では、DbContextsを含む.net 4.5+クラスライブラリがありました。
これらのDbContextは、「既存のデータベースから最初にコードを作成」ウィザードを使用して、既存のDBから作成されていました。このWizardはEF Coreにないようです。
EF Coreと互換性のある既存のDBから新しいCode First DbContextを作成するには、ガイド here
私の手順:
新しいコアクラスライブラリを作成しました
Nugetパッケージを追加Microsoft.EntityFrameworkCore
Nugetパッケージを追加Microsoft.EntityFrameworkCore.SqlServer.Design
Nuget Package Managerコンソールを開きました
コマンド を入力しました
Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"
プロバイダーとして入力
Microsoft.EntityFrameworkCore.SqlServer
コア以外のプロジェクトを使用すると、nuget Package Managerコンソールで問題が発生する可能性があることに注意してください。 .netの代わりに新しいコアクラスライブラリを作成するだけで、この問題を回避しました。
コンテキストを作成したら、Code Firstで通常のように編集できます。使用しないテーブルを削除できます。
詐欺師のメソッドを適用することもできます。VS2015を開き、実際のプロジェクトと同じ名前で新しいクラスライブラリを作成してから、エンティティデータモデルウィザードを実行します。
完了したら、コピーして.netコアプロジェクトに貼り付けます。結果のコードには少し調整が必要ですが、簡単です。
ただし、上記のscaffoldコマンドを実行する方がより良いソリューションです。
Dotnetコアを使用してSqlデータベーススキーマをEFコアに変換する場合は、次の手順に従います。
すべてのコマンドを1つずつ実行します(新しいプロジェクトを作成する場合は最初のコマンド、それ以外は無視して、プロジェクトのルートフォルダーから他のコマンドを実行するだけです)
dotnet new mvc -o <ProjectName>
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet tool install --global dotnet-aspnet-codegenerator
最後に...
dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
これにより、プロジェクトのモデルフォルダー内にdbスキーマの必要なモデルとコンテキストが作成されます。
次のコマンドを適用することで[〜#〜] crud [〜#〜]コードを簡単に生成できるようになりました。
dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
MyNewControllerを希望のコントローラー名で、ModelNameをターゲットにするモデルフォルダー内のモデル名で、最後にMyDbContextでシステムを変更しますModelsフォルダー内で使用可能な生成されたコンテキストファイル名
ただし、そのコマンドを実行する前に、プロジェクトフォルダー内のappsettings.jsonおよびstartup.csファイルで必要な変更を行ったことを確認してください
appsettings.json行の後に追加
「AllowedHosts」:「*」、
"ConnectionStrings": {
"MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
}
startup.cs行の直前にファイルを追加
services.AddMvc()。SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddDbContext<SwiftRbs_LocalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));
楽しい!!