从实体框架代码优先模型生成数据库脚本

时间:2013-03-04 18:05:34

标签: entity-framework

我正在使用具有代码优先的实体框架(主要是因为使用RIA Services,您需要为某些其他属性提供某种形式的代码类。)

我想获得一个数据库生成脚本来轻松更新visual studio数据库项目。我不想使用ef迁移,我更喜欢数据库项目。

我可以使用像

这样的东西
string sqlscript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript();

在运行时,但我希望有一个方便的方法来获取脚本而不以某种方式运行项目,并且不使用迁移。

有人有什么想法吗?

我在不同的项目中使用ef4.1和ef5。

[编辑:回答此问题的一种方法是从包管理器控制台调用上面一行。]

4 个答案:

答案 0 :(得分:4)

一种方法是使用Entity Framework Power Tools。他们为包含DbContext类的文件添加上下文菜单条目,该类为数据库生成DDL文件。

另一种方法是使用LinqPad。在LinqPad中打开dll之后,可以在查询中执行问题中给出的代码片段:

(this as IObjectContextAdapter).ObjectContext.CreateDatabaseScript()

虽然因为它们需要第三方工具,但这两种方式都有点不方便。

答案 1 :(得分:3)

我启用了迁移,但是我总是在运行时获取脚本而不使用Package Manager控制台更新数据库,因为我有动态实体,只能在运行时发现,具体取决于引用的是什么包含在项目中。

获取脚本的代码如下所示:

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);

答案 2 :(得分:1)

您还可以使用`ObjectQuery类生成自定义查询。 这是一个例子:

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

var sqlScript = ((ObjectQuery)query).ToTraceString();

答案 3 :(得分:1)

您可以考虑的方法是使用ef迁移生成脚本,然后使用MSBuild post build任务在构建时将脚本复制到数据库项目。