linq-to-sql - 用于插入/更新/删除的 ADO.NET Entity Framework 自定义 SQL 表达式

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

最佳答案

对于 EF 3.5,您实际上没有其他选择,除了存储过程。

但是对于 EF 4.0,我们向 ObjectContext 添加了一个名为 ExecuteStoreCommand(..) 的新方法和相关方法等。

因此您可以覆盖 SaveChanges(),它现在是虚拟的,并集成 ObjectStateManager 寻找类型的 ObjectStateEntries你感兴趣的,在你感兴趣的 EntityState 中(即 Inserted)等等。

一旦找到,您就可以使用新的 ExecuteStoreCommand() 方法直接对数据库执行命令。然后,通过在 ObjectStateEntry 上调用 AcceptChanges(),您可以阻止 EF 尝试刷新您已处理的数据库的更改。

然后您可以通过调用 base.SaveChanges() 让 EF 为您完成其余的更改。

我知道这并不理想。但这是我能想到的最好的解决方法

亚历克斯

关于linq-to-sql - 用于插入/更新/删除的 ADO.NET Entity Framework 自定义 SQL 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296555/

相关文章:

asp.net-mvc - 如何使用 LinqToSQL 实现对 ASP.NET MVC 2 中的数据注释验证功能的自定义控制?

c# - 使 Entity Framework 将存储过程结果集列解释为 bool 而不是 int?

linq - 如何在单个 linq To Sql 语句中使用子查询、group by、max 和 top?

c# - LINQ 连接表然后按主表分组

linq-to-sql - 如何在 linq for sql 中使用工厂类?

c# - LINQ to Entities 为实体的 child 的 child 返回错误的 ID

c# - 在运行时创建 LINQ 查询到 EntityFramework 中的 GroupBy(具有继承)

sql - 与 Entity Framework 核心不同

c# - 是否有可能使用 Entity Framework 4,让主键在对象上的名称与在表中的名称不同?

.net - LINQ 查询与存储过程