从实体框架中的DbContext生成数据脚本

时间:2015-10-21 18:16:53

标签: c# sql-server entity-framework

我正在研究实体框架,并希望在即将保存更改时从DbContext对象生成并插入/更新/删除脚本。截至目前,我只能通过使用以下代码段从上下文中获取DDL脚本。

string str = ((IObjectContextAdapter)_objDataContext).ObjectContext.CreateDatabaseScript();

有没有办法为所有更改生成脚本?

1 个答案:

答案 0 :(得分:2)

在调用SaveChanges()方法之前,没有任何内置方法可以为更改生成DML脚本,但是可以在插入/更新/删除命令时拦截它们,因为它们在发送到数据库之后SaveChanges()被称为。{/ p>

EF 6为这种情况引入了两个扩展点。

可以将_objDataContext.Database.Log属性设置为TextWriter,其中将记录上下文发出的所有SQL命令。

另一种选择是实现拦截器,当它即将执行命令时或在执行命令后由EF调用。拦截器允许您记录正在发送的SQL命令,甚至提供一种抑制命令执行的方法。

要创建拦截器,您需要编写一个实现IDbCommandInterceptor接口的类,并在Entity Framework中注册该类。

DbInterception.Add(new MyInterceptor());

有关详细信息,您可以看到sample implementation on MSDN

旧版Entty Framework的解决方案可能是您当前数据库提供程序的包装提供程序。