2017-11-04 1 views
0

データベースからのEntity Framework最初にC#WebApiで多対多の関係を持つテーブルモデルクラスを作成しました。Entity Framework多対多および既定のデータ投稿

テーブルACCOUNTSテーブルとテーブルMETADATAには多対多の関係があります。 私はACCOUNTSテーブルに新しいエントリを追加し、このエントリをMETADATAテーブルのいくつかの既存エントリとリンクしたいと考えています。 AngularJSを使ってデータを投稿するにはどうしたらいいですか?

私は$をhttpにこのデータを送信しています:

var account: { 
    Title: 'Title', 
    User: 'User', 
    METADATA: [ 
    { 
     Name: 'value1' 
    }, 
    { 
     Name: 'value2' 
    }] 
} 

上記アカウント変数がACCOUNTSクラスに基づいてPOSTを使用してC#のウェブAPIによって読み取られ、[FromBody]このようにされている:

[HttpPost] 
    public async Task<IHttpActionResult> Add([FromBody]ACCOUNTS account) 
    {        
     db.ACCOUNTS.Add(account); 
     await db.SaveChangesAsync(); 

     int accountId = account.AccountId; 

     return Ok(accountId); 
    } 

テーブルMETADATAに値1と値2が存在することに主キー違反が発生しました。 値がテーブルに存在するため、これは正しいです。

実際には、これらの値を、ACCOUNTSとMETADATAを多対多の関係としてリンクする「中間テーブル」にリンクし、追加しないことをお勧めします。

このシナリオの解決策はありますか?

答えて

1

渡された切断されたaccountオブジェクトを挿入する前に、子のMETADATAオブジェクトを既存のデータベースエンティティにマップする必要があります。たとえば、次のようなものを使用します。

var medataNames = account.METADATA.Select(e => e.Name); 
account.METADATA = db.METADATA.Where(e => metadataNames.Contains(e.Name)).ToList(); 
db.ACCOUNTS.Add(account); 
// ... 
+0

恐ろしいです!ありがとうございました。 – sski

関連する問題