2016-05-13 10 views
0

私は、次のモデルがあります。このデータではエンティティフレームワーク

 private DirectAPIContext db = new DirectAPIContext(); 

    [HttpPost] 
    public async Task<Conversation> CreateConversation([FromBody] Conversation conversation) 
    { 
     Conversation newConversation = conversation; 

     db.Conversations.Add(newConversation); 

     await db.SaveChangesAsync(); 

     return newConversation; 
    } 

:代わりに

{ 
"ConversationId": 7, 
    "Owner": { 
    "UserId": 27, 
    "Name": null, 
    "Conversations": null 
    }, 
    "Users": [ 
    { 
     "UserId": 28, 
     "Name": null, 
     "Conversations": null 
    }, 
    { 
     "UserId": 29, 
     "Name": null, 
     "Conversations": null 
    }, 
    { 
     "UserId": 30, 
     "Name": null, 
     "Conversations": null 
    } 
    ] 
} 

次のエンドポイントを打つ

​​

とIMを既存のユーザーオブジェクトを参照するEntity Frameworkは、新しいユーザーオブジェクトを作成しています。

{ 
    "ConversationId": 7, 
    "Owner": { 
    "UserId": 27, 
    "Name": null, 
    "Conversations": null 
    }, 
    "Users": [ 
    { 
     "UserId": 28, 
     "Name": null, 
     "Conversations": null 
    }, 
    { 
     "UserId": 29, 
     "Name": null, 
     "Conversations": null 
    }, 
    { 
     "UserId": 30, 
     "Name": null, 
     "Conversations": null 
    } 
    ] 
} 

誤ってナビゲーションプロパティを実行しているかどうかわかりません。会話とユーザーとの関係は、多くのものか​​ら多くのものになるはずです。

答えて

0

これは予想される動作です。 EFは、オブジェクトが既に追跡グラフに添付されていない限り、追加したオブジェクトを(直接またはナビゲーションプロパティを介して)挿入しようとします。その場合は、代わりに関連するFKまたはリンクテーブルの行を追加します。

あなたがしたいことは、データベースに既に存在することがわかっている各ユーザーに対してdb.Users.Attach(user)と電話することです。これにより、予想される動作が得られるはずです(新しいユーザー行を挿入する代わりにリンク行を追加するなど)

+0

ありがとう、ありがとうございます! –

関連する問題