实体框架4.1代码优先 - 未插入计算/计算列

时间:2013-06-07 09:56:31

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

我的下面的实体有一个计算/计算列:

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列,我可以观察到如果数字为NULL,则尚未设置RefId列。为什么?有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

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

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