如何告诉实体框架忽略数据库为插入或更新生成值?

Gop*_*i P 2 c# entity-framework

我是新来Entity FrameworkC#

我的表中有一个计算列table1(示例)。我将根据其他列值计算计算列值。我不想Entity Framework在执行插入/更新操作时包括计算列。我怎样才能EF避免那个特定的列。但我想手动设置该特定列的值。

我搜索了相同的内容,但无法得到我的问题的答案。请帮助我,并提前致谢。

AAA*_*ddd 5

您可以使用NotMapped注释

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

[NotMapped]
public string Something
{
    get
    {
        return _something;
    }
    set
    {
        _something = value
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:这不会映射到 dB,所以可能不是你要找的


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

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

哪个可以与 DatabaseGeneratedOption

  • Computed:数据库在插入或更新行时生成一个值。

  • Identity:数据库在插入一行时生成一个值。

  • :数据库不生成值。

[DatabaseGenerated(DatabaseGenerationOption.Computed)]
public string Something { get; set; }
Run Code Online (Sandbox Code Playgroud)