2012-12-02 184 views
0

我有三個表。命名爲:Merchants,MerchantNumberX,Numbers(數字被許多其他實體使用 - 這僅僅是一個例子)。實體框架多對多插入

的招商表如下所示:

MerchantGuid, MerchantName 

的Numbers表格看起來像:

NumberGuid, PhoneNumber 

外部參照表如下所示:

MerchantGuid, NumberGuid 

我知道在實體框架,我可以這樣做:

var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "55555555555" }; 
Merchants.Numbers.Add(newNumber); 

,這將插入關係到兩個表實體之間的外部參照表。 但是,有沒有其他方法可以將這些表「關聯」在一起,而沒有Merchant對象?

例如:

var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "4444444444" }; 
newNumber.MerchantGuid = alreadyKnownMerchantGuid; // This is not available, by the way, just an example of something we are looking for in a many-to-many relationship. 

然而,newNumber給了我一個 「商人」 的屬性,只是遞歸地重演。

我們在重寫了大量的代碼,不知道是否有一個快速的方法,使這種關係,而無需撥打電話到數據庫中得到一個商人的對象,因爲我們已經擁有了有效MerchantGuid的過程。

任何這一個幫助?

回答

2

然而,是否有任何其他的方法來「涉及」這些表一起 無需商家對象?

與EF

號許多一對多的關係是獨立的協會,這意味着,有在你的模型沒有外鍵可用的屬性。你需要使用這兩個集合來操縱關係。這是唯一的方法。

但是,見下一點......

...如果有一個快速的方法,使這種關係,而不必 對數據庫的調用得到一個商人的對象,因爲我們已經 擁有有效的MerchantGuid。

要創建關係,您不需要從數據庫中加載現有的Merchant實體。您可以創建一個密鑰屬性設置爲有效的MerchantGuid的「存根」實體,然後將其附加到上下文。對於EF這是國家Unchanged一個實體,如果它已經從數據庫加載的行爲:

var newNumber = new Number { 
    NumberGuid = Guid.NewGuid(), PhoneNumber = "55555555555" }; 

var merchant = new Merchant { 
    MerchantGuid = alreadyKnownMerchantGuid, Numbers = new HashSet<Number>() }; 
context.Merchants.Attach(merchant); 

merchant.Numbers.Add(newNumber); 

context.SaveChanges(); 

這裏不涉及數據庫查詢。 SaveChanges將在連接表中創建一個新的Number記錄和一個新的關係記錄。

+0

我已經找到了解決辦法,昨晚,但是+1和接受,因爲我想出以及解決方案! :) – Sean