在ScottGu的博客中,他展示了如何覆盖Linq to SQL类的方法,以便可以在.NET端自定义地覆盖对数据的修改。
http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx(插入/更新/删除部分的自定义SQL表达式)
有没有办法在EF中实现相同的功能?
答案 0 :(得分:6)
对于EF 3.5,你没有其他选项,除了sprocs。
但是对于EF 4.0,我们为ObjectContext
ExecuteStoreCommand(..)
和相关方法等添加了一种新方法。
所以你可以覆盖SaveChanges()
,它现在是虚拟的,并且为ObjectStateManager
寻找你感兴趣的类型ObjectStateEntries
,在你的EntityState中感兴趣(即插入)等。
一旦找到,您就可以使用新的ExecuteStoreCommand()
方法直接对数据库执行命令。然后通过调用AcceptChanges()
上的ObjectStateEntry
,您可以阻止EF尝试将更改刷新到您已处理的数据库。
然后,您可以通过拨打base.SaveChanges()
让EF为您完成其余的更改。
我知道这不太理想。但这是我能想到的最好的解决方法
亚历
答案 1 :(得分:1)
EF允许您将这些操作映射到设计器中映射选项卡上的存储过程。然后,您可以将存储过程的输入和输出值映射到对象上的各种属性。
希望有所帮助,