[英]Updating an Entity with EF5
我刚刚开始一个新项目,并且之前在Entity Framework上过得很开心,我在最新版本中使用了Nuget。 一切顺利,直到我尝试更新实体。 我有以下代码;
using (var c = new EFContext())
{
Data.User u = new Data.User() { UserId = UserId };
c.Users.Attach(u);
u.FailedPasswordAttemptCount = newFailedPasswordAttemptCount;
c.SaveChanges();
}
这在EF4中效果很好。 但是在EF5中,这会导致DbEntityValidationException异常,因为我在用户表(UserName)中有一个不可为空的字段。
我可以通过使用空的UserName创建Data.User对象并告诉EF哪些属性已被修改来解决此问题,
using (var c = new EFContext())
{
Data.User u = new Data.User() { UserId = UserId, UserName = "" };
...
c.Entry(u).Property("FailedPasswordAttemptCount ").IsModified = true;
...
}
但这似乎不是特别可管理,因为在此表和许多其他表中添加了更多非空字段。
这个问题指出Attach
仅适用于从EntityObject
派生的实体。 因此,我假设EF5对象不是从此派生的。
任何人都知道如何更新我的实体,而不必每次都指定所有非空字符串字段。
感觉像我遗漏了一些明显的东西...
如果这是现有用户,则可以执行此操作...
c.Users.First(user=>user.UserId == UserId).FailedPasswordAttemptCount = newFailedPasswordAttemptCount;
c.SaveChanges();
顺便说一句,顺便说一句,在EF5代码中,实体类不是从任何东西派生的,但仍然可以附加。
或者,您返回到附加方式,但是我认为您需要为此保存关闭验证,因为似乎EF仅验证整个实体或不验证任何实体
using (var c = new EFContext())
{
c.Configuration.ValidateOnSaveEnabled = false;
Data.User u = new Data.User() { UserId = UserId };
c.Users.Attach(u);
u.FailedPasswordAttemptCount = newFailedPasswordAttemptCount;
c.SaveChanges();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.