【问题标题】:Entity Framework 4.1 Code First - Computed/Calculated column not being insertedEntity Framework 4.1 Code First - 未插入计算/计算列
【发布时间】:2013-06-07 09:56:31
【问题描述】:

我有以下带有计算/计算列的实体:

public EntityA
{
    [Key(), Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    .....

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public virtual string RefId {
        get
        {
            return this.Id.ToString().PadLeft(7, '0');
        }

        private set
        {
        }
    }
} 

RefId 是一个依赖于 Id 值的计算列。

使用 SaveChanges 对数据库执行提交更改后,我可以检查是否已为我当前在数据库中插入的实体正确设置了 Id 和 RefId,但如果我打开数据库并检查该实体的 RefId 列,我可以观察到RefId 列未设置,如果数字为 NULL。为什么?有什么想法吗?

【问题讨论】:

    标签: entity-framework ef-code-first calculated-columns


    【解决方案1】:

    DatabaseGeneratedOption.Computed 表示该值是由数据库引擎计算的。所以 EF 永远不会更新这个值,只会从 db 中读取。

    所以如果你想在数据库中使用这个值: - 删除 DatabaseGeneratedOption.Computed 并在代码中设置值,或者 - 在数据库引擎端设置一个计算列。

    否则您应该将 RefId 设置为未映射。但在这种情况下,您将在 db 中没有列。

    【讨论】:

    • 如果您无法更新数据库具有计算列的对象,这将使错误消失。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2011-08-01
    • 1970-01-01
    • 2011-03-03
    • 2011-09-19
    相关资源
    最近更新 更多