我正在研究实体框架,并希望在即将保存更改时从DbContext对象生成并插入/更新/删除脚本。截至目前,我只能通过使用以下代码段从上下文中获取DDL脚本。
string str = ((IObjectContextAdapter)_objDataContext).ObjectContext.CreateDatabaseScript();
有没有办法为所有更改生成脚本?
答案 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的解决方案可能是您当前数据库提供程序的包装提供程序。