在EF Code First中调用数据库功能的可能方法

时间:2015-11-23 06:19:43

标签: c# entity-framework ef-code-first

考虑我的应用程序中有一些代码优先模型和一些代码段:

var myQueryable = (IQueryable<MyEntity>dbContext.MyEntitySet;
var myFilteredQueryable = externalService.Filter(myQueryable);

现在,我需要从数据库中调用存储函数以添加其他条件,如下所示:

WHERE MyFunc(MyCol) = 1;

我知道,用EdmFunciton创建自己的函数是不可能的,就像这样使用它:

myFilteredQueryable = myFilteredQueryable.Where(myEnt => MyFunctions.MyFunc(myEnty.MyCol);

首先在Databse / Model中提供。

我知道我可以直接运行它:

var selectedIds = myFilteredQueryable.Select(m => m.Id).ToArray();
var filteredIds = dbContext.Database.ExecuteSqlQuery<int>("SELECT Id FROM MyEntity WHERE MyFunc(MyCol) = 1 AND ID in (" + string.Join(selectedIds, ",") + ")").ToArray();

myFilteredQueryable = myFilteredQueryable.Where(myEnt => filteredIds.Contains(myEnt.Id));

这个解决方案的性能不是很好..通过函数可查询过滤的其他方法是什么?我有义务使用Code First,无法对外部服务进行外观处理。

0 个答案:

没有答案