簡體   English   中英

導航到同一表的屬性

[英]Navigation properties to the same table

我的項目中有以下跟蹤模型(EF5,DBContext,數據庫優先):

顧客

 InvoiceAddress -> Addresses (table)
 DeliveryAddress -> Addresses (table)

所以我在同一張桌子上有2個外鍵。

當我使用以下語句加載客戶實體時:

 var cst = ctx.Customers.Where(c => c.CustomerID == 2).SingleOrDefault();
     ctx.Entry(cst).Reference(c => c.InvoiceAddress).Load();

加載InvoiceAddress的引用后,也會加載DeliveryAddress。 但是,只有在發票和交貨ID相同時才會發生這種情況。 當它們不相等時,則不加載DeliveryAddress。 是什么導致此行為?

這是一個有根據的猜測:

當您急切地引用一個實體時,您將立即SELECT它。 當您獲取數據時,實體管理器會以EF的方式創建實體 由於DeliveryAddressInvoiceAddress實際上是相同的實體(相同的PK,如果您具有復合鍵,則必須是相同的復合鍵),因此它使用相同的實例來表示它們兩者,這也意味着這兩個地址被加載-為什么不呢? 它是完全相同的實體,數據指向數據庫中的同一行。 引用是共享的,它使用較少的內存。

如果PK不同,則發票和交貨地址由不同的實體表示,加載一個不會影響另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM