[英]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的方式创建实体 。 由于DeliveryAddress
和InvoiceAddress
实际上是相同的实体(相同的PK,如果您具有复合键,则必须是相同的复合键),因此它使用相同的实例来表示它们两者,这也意味着这两个地址被加载-为什么不呢? 它是完全相同的实体,数据指向数据库中的同一行。 引用是共享的,它使用较少的内存。
如果PK不同,则发票和交货地址由不同的实体表示,加载一个不会影响另一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.