繁体   English   中英

使用EF5更新实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM