繁体   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