Jos*_*rke 5 entity-framework .net-core
我正在使用EF Core 1.1并且有一个类似的查询
var list=from l in context.Users
where l.SomeProp==someVal
select l;
Run Code Online (Sandbox Code Playgroud)
我有一个返回Id的表的UDF,我基本上想要生成以下查询:
select * from Users where SomeProp=@someVal and SomeId in (select id from fn_myfunc(@id))
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我认为您只能对数据库运行原始SQL查询,以便能够使用表值函数.例如:
var query = @"SELECT * FROM Users WHERE SomeProp = {0}
AND SomeId IN (SELECT id FROM fn_myfunc({1})";
var users = context.Users
.FromSql(query, someProp, someId)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这种方法有一些局限性.来自文档:
- SQL查询只能用于返回属于模型的实体类型.我们的待办事项上有一项增强功能,可以从原始SQL查询中返回特殊类型.
- SQL查询必须返回实体类型的所有属性的数据.
- 结果集中的列名必须与属性映射到的列名匹配.请注意,这与EF6.x不同,其中对于原始SQL查询忽略属性/列映射,并且结果集列名必须与属性名称匹配.
- SQL查询不能包含相关数据.但是,在许多情况下,您可以使用Include运算符在查询之上进行组合以返回相关数据.
您可以返回相关数据(即Include),如下所示:
var users = context.Users
.FromSql(query, someProp, someId)
.Include(u => u.OtherThings)
.ToList();
Run Code Online (Sandbox Code Playgroud)
如果您需要执行更复杂的操作,则需要使用原始数据访问(如ADO.Net)或其他ORM.我知道那些使用EF Core进行大部分工作的人然后偶尔会进入Dapper以获得性能或不适合EF的原始SQL.
| 归档时间: |
|
| 查看次数: |
3306 次 |
| 最近记录: |