我有一个包含以下属性的模型:
public Guid UniqueID
{
get { return Guid.NewGuid(); }
}
如果我在创建对象后检查它,我可以看到为UniqueID
字段正确创建了一个新的guid。
但是,当我调用db.SaveChanges()
时,我从实体框架中收到一条错误,指出尽管存在值,它仍然无法在此字段中插入NULL。
有什么想法吗?
修改
private Guid _uniqueID = Guid.NewGuid();
public Guid UniqueID
{
get
{
if(_uniqueID == null){
_uniqueID = Guid.NewGuid();
}
return _uniqueID;
}
set
{
_uniqueID = value;
}
}
答案 0 :(得分:1)
EF不支持get-only属性。 EF需要有一些方法可以在从数据库加载时设置值。如果要使字段不可变,可以使用私有setter:
private Guid _uniqueID = Guid.NewGuid();
public Guid UniqueID
{
get
{
return _uniqueID;
}
private set
{
_uniqueID = value;
}
}
请注意,这与您的编辑略有不同。我创建了setter private
并取出了if(_uniqueID == null)
,因为Guid
是值类型且永远不能为空。