我看到 EF Core 2 有 EF.Functions 属性EF Core 2.0 公告 which can be used by EF Core or providers to define methods that map to database functions or operators so that those can be invoked in LINQ queries
。它包括发送到数据库的 LIKE 方法。
但我需要一种不同的方法,SOUNDEX() 即not包括。如何编写这样一个将函数传递到数据库的方法DbFunction
EF6 中的属性有吗?还是需要等MS来实现?本质上,我需要生成类似的东西
SELECT * FROM Customer WHERE SOUNDEX(lastname) = SOUNDEX(@param)
添加新的标量方法EF.Functions
很简单 - 您只需定义扩展方法即可DbFunctions
班级。然而,提供 SQL 翻译很困难,需要深入研究 EFC 的内部结构。
然而 EFC 2.0 还引入了一种更简单的方法,解释于数据库标量函数映射的部分EF Core 2.0 中的新功能文档主题。
据此,最简单的方法是将静态方法添加到您的DbContext
派生类并将其标记为DbFunction
属性。例如。
public class MyDbContext : DbContext
{
// ...
[DbFunction("SOUNDEX")]
public static string Soundex(string s) => throw new Exception();
}
并使用这样的东西:
string param = ...;
MyDbContext db = ...;
var query = db.Customers
.Where(e => MyDbContext.Soundex(e.LastName) == MyDbContext.Soundex(param));
您可以在不同的类中声明此类静态方法,但随后您需要使用手动注册它们HasDbFunction
流畅的API。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)