2012-03-14 79 views
0

在我的數據庫中,我有一個客戶,他可以有多個位置,一個位置可以有多個客戶。我把我的數據庫設計拖到Linq To SQL數據類文件中,這就是它目前的樣子。LINQ to SQL中的多對多

database

在我的形式,我正在嘗試從一個客戶ADRESS(或多個)。 我已經嘗試了下面的代碼,但我總是得到相同的錯誤:序列不包含任何元素,而它確實有元素! (客戶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 - > Location || locatie_klant - > location_customer

我不知道我在做什麼錯在這裏。 我也想知道如何將新客戶保存到數據庫(有多個位置),有什麼想法?

感謝您的幫助!

回答

1

顯然,客戶的查詢與任何地點都無關。因此你的查詢不會返回任何元素。這本身不是問題,但在您的示例中,您使用的是First()而不是FirstOrDefault()

這是爲什麼一個問題:如果沒有地址給客戶端ID

  • First()會拋出異常。
  • FirstOrDefault()將返回null如果沒有給定客戶端ID的地址。

特別是像這樣的關係,您應該堅持FirstOrDefault(),因爲您永遠無法確定您正在查詢的項目存在關係。

這裏是如何添加一個樣品Customer + CustomerLocations

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(): 
} 

一些普遍性的建議:
堅持爲發展對象的英文名。這被認爲是最好的做法也使得你的生活在so /論壇上使用問題變得更容易。

+0

感謝您的幫助,我的連接表似乎是空的(我查看了錯誤的連接表之前)。我會嘗試在今天添加一個擁有多個位置的客戶。 當我編寫任何代碼時,我通常使用英語,但我不是唯一一個在這個項目上工作的人,他的英語不太好,他們更喜歡荷蘭語。謝謝您的幫助! :) – Schoof 2012-03-15 09:12:06

+0

我不能添加一個「位置」實體到連接表「locatie_klant」,我不知道我在這裏做什麼,對不起! – Schoof 2012-03-15 12:59:33

+0

@ThomasSchoof錯誤「CustomerLocation1'和'CustomerLocation2'應該是'locatie_klant',而不是'klant',更新了代碼,現在它應該可以工作 – ntziolis 2012-03-15 13:17:05