如何修复实体框架部分类方法调用

本文关键字:类方法 调用 框架部 何修复 实体 | 更新日期: 2023-09-27 18:05:37

我在实体框架中使用部分类从一个名为vPerson的视图中计算一个人的年龄。

private string _age;
public string Age
{
    get{return CalculateAge();}
}
private string CalculateAge()
{
    return Convert.ToInt32(System.DateTime.UtcNow.Date.Year - _dob.Value.Year); 
}

然而,当我在EF选择中使用Age时,它不处理查询。下面是代码:

public IQueryable getData()
{
         var res = from p in _context.vPerson.Select
         (
             p=>new PersonDetail
             {
                name = p.name,
                dob = p.dob,
                age = p.Age
             }
         );
         return res;
 } 

我该如何解决这个问题?

如何修复实体框架部分类方法调用

问题是EF不能将您的计算转换为SQL查询。这里有两个选项:

  1. 在vPerson之后使用。tolist()实现结果集,然后在末尾添加。asqueryable()。注意,这样做会丢失查询的延迟执行。
  2. 尝试使用实体函数重写此操作,EF可以将其转换为SQL。看到

EF查询被转换成SQL查询。自定义属性在表中不作为列存在,因此无法将其转换为查询。出于同样的原因,EF查询中不能有方法(除了特定的DB方法,如SqlFunctions)——它们不能转换为SQL查询。你有两个问题:一个自定义属性和一个方法调用。您唯一的选择是在查询中直接进行计算。