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のような内部例外値が発生します。 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

保存する前に 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;

幸運を!

于 2012-04-30T04:05:57.290 に答える
0

決定できる限り、問題はオブジェクトへの「深い」参照、または参照への参照に起因しているようです。IOW、クラスFooは、クラスFooへの参照を作成したクラスBazへの参照を作成したクラスBarへの参照を作成しました...そして明らかにEFはこれをあまり好きではありません。

于 2012-04-30T21:11:02.047 に答える