ADO.NET实体框架用于插入/更新/删除的自定义SQL表达式

时间:2009-08-18 21:12:54

标签: linq-to-sql entity-framework

在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中实现相同的功能?

2 个答案:

答案 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允许您将这些操作映射到设计器中映射选项卡上的存储过程。然后,您可以将存储过程的输入和输出值映射到对象上的各种属性。

希望有所帮助,