2

我的代码看起来很简单:

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带有内部异常值的 a 表示: OriginalValues cannot be used for entities in the Added state.

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

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

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,用于将数据从注册表单传送到控制器。 userRep是我的用户存储库。

4

2 回答 2

0

尽可能确定,问题似乎源于对对象的“深度”引用,或对引用的引用。IOW,类 Foo 引用了类 Bar 引用了类 Baz 引用了类 Foo ......显然 EF 不太喜欢这个,因为它不容易验证。

于 2012-04-30T21:11:02.047 回答
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;

祝你好运!

于 2012-04-30T04:05:57.290 回答