2

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

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。为什么?有任何想法吗?

4

1 回答 1

4

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

因此,如果您希望在 db 中使用此值: -DatabaseGeneratedOption.Computed在代码中删除并设置该值,或者 - 在数据库引擎端设置计算列。

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

于 2013-06-07T12:25:29.037 回答