我的下面的实体有一个计算/计算列:
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列。为什么?有什么想法吗?
答案 0 :(得分:4)
DatabaseGeneratedOption.Computed
表示该值是由数据库引擎计算的。所以EF永远不会更新这个值,只能从数据库中读取。
所以如果你想在db中使用这个值:
- 删除DatabaseGeneratedOption.Computed
并在代码中设置值,或
- 在数据库引擎端设置计算列。
否则,您应将RefId设置为未映射。但在这种情况下,数据库中没有列。