2009-09-03 19 views
0

私はCustomersというテーブルとCustomerAddressesというテーブルの2つを持っているとしましょう。次に、タイプList<Address>のプロパティを含むCustomerオブジェクトがあるとします。このプロパティには、顧客が使用した可能性があるすべての異なる配送先住所のリストが格納されているため、0〜n個の住所が含まれている可能性があります。今、私はlinq SQLプロシージャを使用してこれらの2つのテーブルにロードするCustomerオブジェクトのコレクションを持っています。 Customersテーブルには、ID列であるCustomerIDという列があり、自動インクリメントする必要があります。 CustomerAddressesテーブルには、CustomerIDという列(およびAddressという列もあります)があり、顧客を表のアドレスに接続します。私の主な難点は、リストをテーブルに追加し、CustomerIDの列を一致させる方法を考え出すことです。事前にlinq to sqlを使って複数のテーブルにアイテムを追加する

おかげで、

ボブ

答えて

1

私はこれがあなたが必要と考えるものです。私は顧客オブジェクトにあるプロパティをCustomerAddressesと命名し、アドレスのリストを保持しています。

static void SaveCustomer(Customer customer) 
{ 
    using(var dc = new TestDC()) 
    { 
     dc.Customers.InsertOnSubmit(customer); 
     dc.SubmitChanges(); 

     foreach (CustomerAddress address in customer.CustomerAddresses) 
     { 
      address.CustomerId = customer.Id; 
      dc.CustomerAddresses.InsertOnSubmit(address); 
      dc.SubmitChanges() 
     } 
    } 
} 

はい、必須ではありませんが、これらの表の間にFKを置く必要があります。

+0

ありがとう、私はこれが私が必要と思うものだと思う。私はそれを試し、出てくるかもしれない質問を追加します。再度、感謝します。 ボブ – Beaker

2

あなたは、顧客の行(InsertOnSumbit)を追加し、その後、あなたが新たに生成したIDを挿入し、顧客のオブジェクトを更新でSubmitChanges()関数を有効にします。

using(var dc = new TestDC()) 
{ 
    var cust = new Customer(); 

    cust.Name = "Jack"; 

    dc.InsertOnSubmit(cust); 

    SubmitChanges(); // cust.Id will be updated with a new generated value 
} 

ところで、このコードをTransactionScopeで取り囲むことでトランザクションサポートが可能です。

お楽しみください。

+0

linqは、どの列がアドレス文字列のリストを他のテーブルに入れるかを知っていますか? 2つのテーブルの間に外部キーを設定する必要がありますか? – Beaker

+0

私の例は、アイデンティティ指向のテーブルに新しい行を追加することです。 SQLでは列の型としてリストを表現するべきではないので、LINQでもそれを許さないようにしてください。 2つのテーブル(Customer&CustomerAddresses)によって作成されるCustomerBLというBLオブジェクトが必要です。 CustomerBLは、CustomerAddressesテーブル(その列はCustomerAddressId(PK int)、CustomerId(PK int)、Address(string))から入力可能なアドレスのリストで構成されます。 –

+0

おそらく私の問題は、これらのテーブルとビジネスレイヤオブジェクトの設定です。 – Beaker

関連する問題