1 DbContext db = new dbEntities(); 2 /// <summary> 3 /// 新增 4 /// </summary> 5 /// <param name="model"></param> 6 /// <returns></returns> 7 public virtual T Add(T model) 8 { 9 db.Set<T>().Add(model); 10 db.SaveChanges(); 11 return model; 12 }
有一个需求,对表A执行增删改,
然后在表B记录 对表A的执行的SQL语句 insert update delete语句
我想要在db.SaveChanges()之前、或者之后
获得EntityFramework生成的对表A的SQL语句
然后插入到表B中,如何或者EF生成的SQL语句?
你跟进Add方法里去看看,在最里层一定有将EF语句转成SQL去操作数据库的,你看具体是在哪转,把它存起来插入到B表就行了。
Add方法是EF的方法,看不到,手头又没有反编译工具
@没事编编程: 那我也没办法了,反编译工具我到有,不过EF那么大,反后也不好找吧?要的话加我QQ,我发你试试,553030761
这个在业务上面处理应该比较好,EF早期的版本是可以看到生成的sql,新版本已经看不到了。不要在这个上面钻牛角尖
怎么在业务上面处理?求举例~~
@没事编编程: 如果你要记录所有的dml,那么可能需要分析数据库日志了,不然不好做。
还是用sql里面的触发器吧。
可以使用SQL Server Profiler跟踪你的数据库,用这个可以看到你用EF执行操作时候生成的语句
+1
此答案正解...
正解~~~
使用 ToTraceString 方法 ,或者使用SQL Server Profiler来实现
ToTraceString() 方法可以
ObjectQuery.ToTraceString()方法就行了http://msdn.microsoft.com/zh-cn/library/system.data.objects.objectquery.totracestring.aspx
搞个触发器,把所有的语句插入另外一张表中。到时候从此表中读取出来即可。