我的代码似乎很简单:
bool rv = false;
var results = from user in Users
where user.userName.Equals(newUser.userName)
select user;
if (results.Count() == 0)
{
this.context.Users.Add(newUser);
this.context.SaveChanges();
rv = true;
}
return rv;
但这导致DbEntityValidationException
内部异常值表示:
OriginalValues cannot be used for entities in the Added state.
......这甚至意味着什么?我唯一能想到的是newUser
显示userID
的值为0,即使它有一个私有的setter而userID
作为主键,应该是数据库 - 产生。但是如果 是问题,就不可能简单地使用Add()
将对象插入到任何EF数据库中。所以我很困惑。
提前感谢任何能帮助解释这一点的人。
ETA:newUser
由我的控制器中的以下代码创建:
[HttpPost]
public ActionResult CreateRegistration(FormVMRegistration newRegistration)
{
//draw info from form and add a new user to repository
User newUser = new User();
newUser.userName = newRegistration.userName;
newUser.screenName = newRegistration.screenName;
newUser.password = newRegistration.usersPW;
bool addSuccess = userRep.Add(newUser);
...
}
FormVMRegistration
只是一个只有字符串属性的ViewModel,用于将数据从Regiostration表单传递给Controller。
userRep
是我的用户存储库。
答案 0 :(得分:0)
我认为这是因为您在保存之前使用了newUser对象。尝试更改此行
bool addSuccess = userRep.Add(newUser);
到
bool addSuccess = userRep.Add(newUser, newRegistration.userName);
然后(给定passUserName是从上面传递的名称)将您的linq查询更改为:
var results = from user in Users
where user.userName.Equals(passedUserName)
select user;
祝你好运!
答案 1 :(得分:0)
尽可能确定,问题似乎源于对对象的“深层”引用或对引用的引用。 IOW,Foo类引用了类Bar,它引用了类Baz,引用了类Foo ......显然EF并不喜欢这么多,因为它不容易验证。