我正在使用具有代码优先的实体框架(主要是因为使用RIA Services,您需要为某些其他属性提供某种形式的代码类。)
我想获得一个数据库生成脚本来轻松更新visual studio数据库项目。我不想使用ef迁移,我更喜欢数据库项目。
我可以使用像
这样的东西string sqlscript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript();
在运行时,但我希望有一个方便的方法来获取脚本而不以某种方式运行项目,并且不使用迁移。
有人有什么想法吗?
我在不同的项目中使用ef4.1和ef5。
[编辑:回答此问题的一种方法是从包管理器控制台调用上面一行。]
答案 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任务在构建时将脚本复制到数据库项目。