在本文之后,我尝试使用Entity Framework Core在我的应用程序中调用内部SQL函数
我在上下文中创建了静态方法,如下所示:
public class DbContext : DbContext
{
public DbContext(DbContextOptions<DbContext> options) : base(options)
{
}
[DbFunction("FN_ENCRYPT", "DBO")]
public static string FN_ENCRYPT(string ENC)
{
throw new NotImplementedException();
}
}
在此之后,我对如何调用感到有些困惑,因此我尝试了这种方式(当然,因为它是静态方法):
public string Encript(string word)
{
return DbContext.FN_ENCRYPT(word);
}
但猜猜怎么了?我收到一个“不错”的NotImplementedException :)
有人可以帮我吗?
提前致谢
使用该调用本身会引发异常,因为它实际上执行C#代码。建议抛出异常的原因正是这样,以避免意外使用,即直接调用它。该签名将由给定的LINQ提供程序解释并转换为适当的SQL语句。
在MS EF核心数据库标量函数映射中:
它们可以在LINQ查询中使用并转换为SQL
这是一个工作示例:
模型和DbContext
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DOB { get; set; }
}
public class MyDbContext:DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options):base(options)
{ }
public DbSet<Employee> Employees { get; set; }
[DbFunction("CalculateAge", "dbo")]
public static int CalculateAge(DateTime dob)
{
throw new NotImplementedException();
}
}
和使用
public IActionResult GetAge(int employeeId)
{
var query = _context.Employees
.Where(x => x.Id == employeeId)
.Select(d =>new
{
Name=d.Name,
DOB=d.DOB,
Age= MyDbContext.CalculateAge(d.DOB)
}).ToList();
return Json(query);
}
结果
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句