【问题标题】:Custom getter on entity model?实体模型上的自定义吸气剂?
【发布时间】:2021-08-31 15:23:34
【问题描述】:

我有一个具有 Date 属性的实体,并且想要创建一个布尔属性来检查该 Date 是否在未来。

public DateTime Date { get; set; }

public virtual bool IsUpcoming {
    get
    {
        return Date >= DateTime.Now;
    }
}

但是当我尝试对其运行 Get 时,它会抛出此错误:

LINQ 表达式 'DbSet() .Where(s => s.IsUpcoming)' 无法翻译。附加信息:实体类型“Show”上的成员“IsUpcoming”的翻译失败。这通常发生在指定成员未映射时。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。更多信息请见https://go.microsoft.com/fwlink/?linkid=2101038

关于为什么/如何工作的任何提示?

【问题讨论】:

    标签: entity-framework entity-framework-core ef-code-first


    【解决方案1】:

    你必须添加 [NotMapped] 属性

    [NotMapped]
    public virtual bool IsUpcoming {
        get
        {
            return Date >= DateTime.Now;
        }
    }
    

    如果你使用fluent api,则忽略

     modelBuilder.Entity<Show>().Ignore(c => c.IsUpComing);
    

    但是在您将数据库设置到您的应用程序之后(通常在 ToList() 之后),您将能够使用它。如果您尝试在 Linq 查询中使用它从 DB 获取数据,您将得到您已经得到的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-26
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多