2

以下のコードを実行すると、例外が発生しました。

AssociationSet 'x' を更新するには、EntitySet 'x' の対応するエンティティが ObjectStateManager で利用可能である必要があります。

これが私のコードです。クライアントを Users エンティティセットに追加するかどうかに関係なく、エラーが発生します。

        MyDBEntities db = new MyDBEntities();
        //create new client entity
        ClientUser client = new ClientUser();
        client.UID = 9;
        client.UserName = "KKL";
        client.CompanyName = "KKL Company";

        //retrieve existing entity
        AdminUser admin = db.Users.OfType<AdminUser>().FirstOrDefault();
        //assign AdminUser of new client to existing admin
        client.AdminUser = admin;

        //db.Users.AddObject(client);
        db.SaveChanges();

最初に新しいエンティティを保存してから、関係を追加して再度保存しようとしました。しかし、同じエラーメッセージが表示されます。:(

        MyDBEntities db = new MyDBEntities();
        //create new client entity
        ClientUser client = new ClientUser();
        client.UID = 9;
        client.UserName = "KKL";
        client.CompanyName = "KKL Company";

        //first save the new object
        db.Users.AddObject(client);
        db.SaveChanges();

        //retrieve existing entity
        AdminUser admin = db.Users.OfType<AdminUser>().FirstOrDefault();
        client.AdminUser = admin;

        db.SaveChanges();

解決する!!!

私の問題は関連にあります。

ClientUser と AdminUser の間の両端で 0..1 の関係があります。

管理者 (0..1) < -- > クライアント (0..1)

そして、その管理者ユーザーを別の既存のクライアントに既に割り当てています。次に、新しいクライアントを作成してその管理者を割り当てようとすると、エラーが発生します。

以下のように関係を変更して修正しました

管理者 (0..1) < -- > クライアント (*)

4

1 に答える 1

0

poco オブジェクトを使用している場合、ClientUser の作成方法に問題があります。現在のコンテキスト内で新しい ClientUser を作成する必要があります。

ClientUser client = _myObjectContext.CreateObject<ClientUser>();
于 2011-12-07T08:56:05.397 に答える