如何告诉Entity Framework忽略数据库生成插入或更新的值?

时间:2018-02-05 10:29:43

标签: c# entity-framework

我是Entity FrameworkC#的新手。

我的表table1中有一个计算列(示例)。我将根据其他列值计算计算列值。我不希望Entity Framework在执行插入/更新操作时包含计算列。如何使EF避免使用该特定列。但我想手动设置该特定列的值。

我搜索了同样但我无法得到我的问题的答案。请提前帮助我,谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用NotMapped注释

  

代码第一约定规定了每个属性   支持的数据类型在数据库中表示。那个属性可以   动态创建,不需要存储。你可以标记   任何未使用NotMapped映射到数据库的属性   注释

[NotMapped]
public string Something
{
    get
    {
        return _something;
    }
    set
    {
        _something = value
    }
}

更新:这不会映射到dB,因此可能不是您要找的

只是为了使DatabaseGenerated注释更加完整,是您正在寻找的机器人

  

重要的数据库功能是具有计算能力   属性。如果您将Code First类映射到表   包含计算列,您不希望实体框架尝试   更新这些列。但是你确实希望EF从中返回这些值   您插入或更新数据后的数据库。你可以使用   DatabaseGenerated注释,用于标记类中的这些属性   以及Computed enum。其他枚举是None和Identity。

可以与DatabaseGeneratedOption

一起使用
  
      
  • 已计算:插入或更新行时,数据库会生成一个值。

  •   
  • 标识:插入行时数据库会生成一个值。

  •   
  • :数据库不会生成值。

  •   
[DatabaseGenerated(DatabaseGenerationOption.Computed)]
public string Something { get; set; }

答案 1 :(得分:1)

在计算列服务器端时,正确的方法是在上下文级别配置字段:

如果您使用NotMapped,您将无法获得数据库中的值。