gpt4 book ai didi

c# - ASP.NET MVC 3,代码优先 EF : OriginalValues?

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:36 25 4
gpt4 key购买 nike

我的代码看起来很简单:

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 不能用于已添加状态的实体。

...那到底是什么意思?我唯一能想到的是 newUser 显示 userID 的值为 0,即使它有一个私有(private) setter 和 userID,作为主键,应该是数据库生成的。但是,如果 是问题所在,那么就不可能简单地使用 Add() 将对象插入到任何 EF 数据库中。所以我很困惑。

提前感谢任何可以帮助阐明这一点的人。

预计到达时间:newUser 由我的 Controller 中的以下代码创建:

[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 是我的用户存储库。

最佳答案

我认为这是因为您在保存之前使用了 newUser 对象。尝试更改此行

bool addSuccess = userRep.Add(newUser);

bool addSuccess = userRep.Add(newUser, newRegistration.userName);

然后(假设 passedUserName 是上面传递的名称)将您的 linq 查询更改为:

var results = from user in Users
where user.userName.Equals(passedUserName)
select user;

祝你好运!

关于c# - ASP.NET MVC 3,代码优先 EF : OriginalValues?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com