4

私はエンティティ フレームワークをコード ファーストで使用しています (主に、RIA サービスでは、追加の属性のためになんらかの形式のコード クラスが必要になるためです)。

Visual Studio データベース プロジェクトを簡単に更新するためのデータベース生成スクリプトを入手したいと考えています。私は ef 移行を使用したくありません。データベース プロジェクトの方が好きです。

次のようなものを使用できます

string sqlscript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript();

実行時に、何らかの方法でプロジェクトを実行せず、移行を使用せずにスクリプトを取得する便利な方法が必要です。

誰にもアイデアはありますか?

私は異なるプロジェクトでef4.1とef5を使用しています。

[編集:この質問に答える 1 つの方法は、パッケージ マネージャー コンソールから上記の行を呼び出す方法です。]

4

4 に答える 4

4

1つの方法は、Entity FrameworkPowerToolsを使用することです。これらは、データベースのDDLファイルを生成するDbContextクラスを含むファイルのコンテキストメニューエントリを追加します。

別の方法は、LinqPadを使用することです。LinqPadでdllを開いた後、クエリの質問で指定されたコードスニペットを実行できます。

(this as IObjectContextAdapter).ObjectContext.CreateDatabaseScript()

どちらの方法も、サードパーティのツールを必要とするため、少し不便です。

于 2013-03-07T10:55:59.253 に答える
3

移行を有効にしましたが、プロジェクトに含まれる参照に応じて実行時にのみ検出できる動的エンティティがあるため、パッケージ マネージャー コンソールを使用してデータベースを更新することなく、常に実行時にスクリプトを取得します。

スクリプトを取得するコードは次のようになります。

var config = new DbMigrationsConfiguration<MyContext> { AutomaticMigrationsEnabled = true };
var migrator = new DbMigrator(config);
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null);
于 2015-02-19T14:39:26.700 に答える
1

`ObjectQuery クラスを使用してカスタム クエリを生成することもできます。次に例を示します。

var query = from emp in context.Employees
            select emp;

var sqlScript = ((ObjectQuery)query).ToTraceString();
于 2013-03-07T11:21:27.530 に答える
1

考えられるアプローチは、ef migrations を使用してスクリプトを生成し、MSBuild ポスト ビルド タスクを使用して、ビルド時にスクリプトをデータベース プロジェクトにコピーすることです。

于 2014-09-29T05:48:01.293 に答える