这是一个说明问题的样本
人必须具有PersonType
HasRequired(o => o.PersonType).WithMany(o => o.Persons);
然后使用断开连接的实体。当我这样做时,
//Person with ID=4 exists in DB
Person p = new Person() { PersonId = 4, PersonType= null, Address = ... };
//PersonType is null here
using (var ctxNew = new Context())
{
var entry = ctxNew.Entry(p);
entry.State = System.Data.Entity.EntityState.Modified;
ctxNew.SaveChanges(); //Ok. But shouldn't be
}
由于某种原因,SaveChanges()成功而没有错误。但据我所知,它应该无法验证。这对我来说是一个问题,因为我从服务层获取这样的对象,我不希望它们无声地失败。这里的问题是什么?
答案 0 :(得分:1)
这里的问题是:当你这样做时:
entry.State = System.Data.Entity.EntityState.Modified;
EF标记为仅修改指定的实体。如果您的实体具有其他相关实体(例如' PersonType' navigation属性),它们将保持未更改状态,并且不会在SaveChanges方法调用上发送到数据库(并且未经过验证)。
对于此类属性,您可以通过调用SetModifiedProperty方法将其状态更改为“修改”:
entry.SetModifiedProperty("PersonType");