【发布时间】:2014-11-30 06:57:30
【问题描述】:
我是否可以扩展 EntityFramework(例如 v6)以通过可能将扩展写入库来添加对 EF 当前不支持的新 SQL 函数的支持。我们正在使用 MSSQL,不需要跨数据库功能。我们在 C# 中调用一个方法,该字符串构建 SQL 语句,然后调用 ExecuteSqlCommand() 来执行它。这显然很丑陋,我想知道是否可以扩展 EF 以添加全新的查询能力,例如MERGE。
我们需要整个 LINQ 查询来生成 IQueryable,就像 EF 一样,并推迟执行直到需要,就像 Context.MyCollection.Where(x => x.Num == 6).Select(x => x.ID) 在实际需要值之前不会执行。比如打电话给.ToList()
作为一个附带问题,如果我能够扩展 EF 以添加此功能,是否也可以扩展 LINQ 查询语言。示例:
from s in Context.Schools
where s.District.DistrictName == "District 5"
merge os in Context.OtherSchools using (os.SchoolID == s.SchoolID) into m
when matched Context.OtherSchools.Update(s)
when not matched Context.OtherSchools.Add(s)
select m.inserted.id
或类似的东西...我知道其中很多都不存在,但我想知道是否可以扩展 linq 以向其添加关键字?如果不是,是否甚至可能 扩展 EF 以向 lambda 样式 添加新功能,例如 SQL MERGE 或其他的实现?如果它是可能的,那么人们甚至会从哪里开始寻求添加此功能?
【问题讨论】:
-
我认为您只需在针对 IQueryable 的扩展方法中实现 SQL 命令。
-
@novaterata 这是有道理的,本质上是我想要做的。这适用于 EF 吗?您知道我可以查看和学习的与 EF 一起使用的 IQueryable 扩展示例吗?
-
查看 EF 6 自己的扩展方法entityframework.codeplex.com/SourceControl/latest#src/…
标签: c# linq entity-framework extension-methods