4

我正在使用具有代码优先的实体框架(主要是因为使用 RIA 服务,无论如何您都需要某种形式的代码类来获取其他属性)。

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

我可以使用类似的东西

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

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

有人有什么想法吗?

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

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

4

4 回答 4

4

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

另一种方法是使用 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 迁移来生成脚本,然后在构建时使用 MSBuild 构建后任务将脚本复制到数据库项目。

于 2014-09-29T05:48:01.293 回答