2012-03-16 21 views
0

挿入と更新の両方に同じコードを使用する方法があることが期待されていました。Entity Framework 4.0挿入/更新

たとえば、エンティティフレームワークを使用して以下のような新しいクライアントを挿入します。

クライアントを更新するために同じコードを使用することができれば、コードを2重に書く必要はありません。

using (var context = new GenWebEntities()) 
{ 
    clientObj = context.Clients.Single(c => c.ClientId == 31); 

    var client = new Client 
    { 
    FirstName = "Johnathan", // Updated First Name 
    LastName = "Rock" // Updated Last name 
    }; 
    clientObj = client; 

    context.SaveChanges(); 
} 

挿入と更新の両方をコードする1つの方法がある場合は、上記の方法で新しいレコードを挿入する方法がわかります。

**更新** 私はこの解決策に遭遇する問題は、1対多の関係があることです。

例:

私は多くの1つである、別のテーブルClientPaymentを持っています。ですから、ClientPaymentを更新する必要がある場合、このテーブルをどのように参照するのですか?

client.ClientPayments.Add(new ClientPayment { Type = "Credit Card", CardNumber = "4111-1111-1111-1111") 

ありがとう:私はnormalyどうなるの挿入のために

+1

は、私はあなたの既存のコードは、あなたがそれをやっていると思う何をやっているとは思いません。コンテキストに新しいオブジェクトを追加する場合は、 'context.Add(newClient)'を使用してください。 'context.Clients'IQueryableを使ってDBからオブジェクトを取得する場合、新しいオブジェクトを作成する必要はありません。 'clientObj'のプロパティを変更して' SaveChanges'を呼び出すことができます。 "挿入"(新しいオブジェクトを保存する)と更新(変更されたオブジェクトを保存する)の唯一の違いは、新しいコンテキストの前に 'context.Clients.Add'を実行する必要があることです。 –

答えて

0

たぶん、このような何か:

private void SaveAndUpdate(int? ClientId) 
{ 
    using (var context = new GenWebEntities()) 
    { 
     Client client; 
     if(ClientId.HasValue) 
      client=context.Clients.Single(c => c.ClientId == ClientId.Value); 
     else 
      client = new Client(); 

     client.FirstName = "Johnathan"; 
     client.LastName = "Rock"; 

     if(!ClientId.HasValue) 
      context.Clients.Add(client) 

     context.SaveChanges(); 
    } 
} 
+0

私はこの解決策を実行する際の問題は、1対多の関係があることです。 例: 私は、1対多の別のテーブルClientPaymentを持っています。ですから、ClientPaymentを更新する必要がある場合、このテーブルをどのように参照するのですか?挿入のために 私はnormalyだろう: client.ClientPayments.Add(新しいClientPayment {タイプ=「クレジットカード」を、カード番号=「4111-1111-1111-1111」) 私はこのように、私の質問を更新しましたより読みやすいです。 – PsychoDUCK

+0

これは、新規作成時にのみ追加されますか?またはこれも更新する必要がありますか? – Arion

+0

新しいクライアントを作成するときに、支払い方法を追加する必要があります。しかし、私はまた、支払いを更新することができる必要があります。 – PsychoDUCK

関連する問題