2012-03-14 10 views
0

私のデータベースには、複数の場所を持つことができ、複数の顧客を持つことができる顧客がいます。私は自分のデータベース設計をLinq To SQLデータ・ファイルにドラッグしました。これは現在の外観です。私のフォームで多くのLINQ to SQL

database

私は、顧客からのアドレス(または複数)を取得しようとしています。 私は次のコードを試しましたが、私はいつも同じエラーが発生します:シーケンスは要素を持っていませんが、要素はあります! (ID 2と顧客、ロケーションID 1と2,1と結合テーブル)

public static locatie getLocationByCustomer(int id) 
    { 
     var query = (from v in dc.locaties 
         from e in v.locatie_klants 
         where e.klant_id == id 
         select v); 


     locatie locatie = query.First(); 
     return locatie; 
    } 

翻訳:klant - >顧客||場所 - >場所|| locatie_klant - > location_customer

ここで間違っていることはわかりません。 新しい顧客をデータベース(複数の場所を持つ)に保存する方法も考えられますか?

ありがとうございました!

答えて

1

明らかにお客様のお問い合わせは、どの場所にも関連していません。したがって、クエリは要素を返しません。これ自体は問題ではありませんが、サンプルではFirstOrDefault()ではなくFirst()を使用しています。与えられたクライアントIDのためのアドレスが存在しない場合

  • First()が例外をスローします:

    は、なぜこの問題です。
  • FirstOrDefault()は、指定されたクライアントIDのアドレスがない場合は、nullを返します。

特に、このような関係の場合、照会しているアイテムに関連性があることが決して確信できないので、FirstOrDefault()に固執する必要があります。

var newCustomer = new klant() 
{ 
    // set neccessary properties 
}; 

var newCustomerLocation1 = new locatie_klant() 
{ 
    // set neccessary properties 
}; 

var newCustomerLocation2 = new locatie_klant() 
{ 
    // set neccessary properties 
}; 

using (var context = new DBContext()) 
{ 
    context.klants.Add(newCustomer); 
    context.locatie_klants.Add(newCustomerLocation1); 
    context.locatie_klants.Add(newCustomerLocation2); 
    context.SaveChanges(): 
} 

いくつかの一般的なアドバイス:
スティック開発オブジェクトのための英語名にここ

Customer + CustomerLocationsを追加する方法のサンプルです。これはベストプラクティスと見なされるので、あなたの人生は、フォーラムで質問をすると楽になります。

+0

助けてくれてありがとう、私の結合テーブルは空であるように見えました(前に間違った結合テーブルを見ました)。今日は複数の場所に顧客を追加しようとしています。 私はコードを書くときにはいつも英語を使いますが、私はこのプロジェクトで働く唯一の人ではなく、彼の英語はあまり良くなく、彼らはオランダ語を好きです。助けてくれてありがとう! :) – Schoof

+0

"Locatie_klant"という結合テーブルに "Location"エンティティを追加できません。ここで何をしているのか分かりません! – Schoof

+0

@ThomasSchoof単純にコピー&ペーストのエラー 'CustomerLocation1'と' CustomerLocation2'は 'klant'ではなくlocatie_klantでなければなりません。コードが更新されました。 – ntziolis