0

まず、エラーは「IEntityChangeTrackerの複数のインスタンスによってエンティティオブジェクトを参照できません」です

User と UsersInHospitals の 2 つのエンティティがあります。

ユーザーの新しいアカウントを作成する方法は次のとおりです

var user = new User(); user.UserID = Guid.NewGuid(); user.Address = employmentAddress.Trim(); user.ZipCode = int.Parse(zipcode.Trim());

UsersInHospital hospitalAff;

          hospitalAff = new UsersInHospital()
           {
                    UserID = user.UserID,
                    HospitalID = Guid.Parse(hospitalAff1),
                    IsEmployed = Boolean.Parse(isEmployed1)
           };
           user.UsersInHospitals.Add(hospitalAff);

                hospitalAff = new UsersInHospital()
                {
                    UserID = user.UserID,
                    HospitalID = Guid.Parse(hospitalAff1),
                    IsEmployed = Boolean.Parse(isEmployed2)
                };
                user.UsersInHospitals.Add(hospitalAff);

そしてそれを保存します

_db.AddToUsers(user);
return _db.SaveChanges(); //THIS LINE GIVES ME ERROR

私はエンティティ フレームワーク 4 を使用しています。病院エンティティごとに個別に変数を作成する必要があるとは思えません

4

2 に答える 2

0

何が問題なのかわかりました。

実際には、同じ HospitalID を持つ UsersInHospitals を追加していたため、エンティティが重複するという問題が発生していました

EFによって自動的に追加された「UserID = user.UserID」を修正してくれた@Darkoに感謝します。

問題を実際に表示するために質問を編集しました。質問でこの問題を示していないことをお詫びします

于 2013-10-26T11:31:26.783 に答える
0

入院中のユーザー用に 2 つの個別の変数を作成する必要があります。そうしないと、同じオブジェクトの 2 つの参照をリストに追加することになります。これが、Entity Framework が IEntityChangeTracker を同じオブジェクトに 2 回追加しようとする理由です。

var user = new User
{
    UserID = Guid.NewGuid(), 
    Address = employmentAddress.Trim(), 
    ZipCode = int.Parse(zipcode.Trim())
};

var hospitalAff1 = new UsersInHospital
{
    UserID = user.UserID,
    HospitalID = Guid.Parse(hospitalAff1),
    IsEmployed = Boolean.Parse(isEmployed1)
};

user.UsersInHospitals.Add(hospitalAff1);

var hospitalAff2 = new UsersInHospital
{
    UserID = user.UserID,
    HospitalID = Guid.Parse(hospitalAff2),
    IsEmployed = Boolean.Parse(isEmployed2)
};

user.UsersInHospitals.Add(hospitalAff2);

また、UsersInHospitalオブジェクトで UserId を指定する必要はありません。主キーと外部キーを適切に設定していれば、エンティティ フレームワークがその作業を行います。次に、コードは次のようになります。

var user = new User
{
    UserID = Guid.NewGuid(), 
    Address = employmentAddress.Trim(), 
    ZipCode = int.Parse(zipcode.Trim()),
    UsersInHospitals = new List<UsersInHospital> //or array or whatever it is
    {
        new UsersInHospital
        {
            HospitalID = Guid.Parse(hospitalAff1),
            IsEmployed = Boolean.Parse(isEmployed1)
        },
        new UsersInHospital
        {
            HospitalID = Guid.Parse(hospitalAff2),
            IsEmployed = Boolean.Parse(isEmployed2)
        }
    }
};
于 2013-10-26T11:10:32.017 に答える