这里最明显的解决方案是更改1:*发票之间的关联
在电火花加工中形成1:1的关联。但是,根据您的经验,映射将不会
外键协会
在你的模型中的两个实体之间。
映射唯一外键关联的唯一方法是使用
独立协会
将外键关联转换为独立关联意味着从Order实体中删除InvoiceID外键,并通过映射重新创建关联。
要更改关联,您需要执行以下操作:
-
-
选择发票和订单之间的关联。
-
在关联的“属性”窗口中,通过
-
通过单击“删除”按钮删除约束。
-
在设计器中的关联上单击鼠标右键,然后从上下文菜单中选择“表映射”。
-
在“映射详细信息”窗口中,单击
-
从下拉列表中,选择“顺序”。映射应该自动填充。
-
返回关联的属性窗口。
-
对于名为End2 Multiplicity的属性(当前具有Orders的值*集合),请使用其下拉列表将该属性更改为1(Order的一个)。
-
通过右键单击设计图面并选择“验证”来验证模型。您将看到与此映射相关的错误消息已消失。
当在应用程序中遇到此问题时,您必须决定哪个对您的模型和应用程序逻辑更重要:外键标量(例如Order.InvoiceID)或当一个实体(Invoice)和另一个实体(Order)通过外键(InvoiceID)连接时,能够定义它们之间的1:1关联。
好消息是新的EF4.0
延迟加载
仍将与独立协会合作,只是外键不公开。要获取此信息,您必须转到导航属性(Invoice)并读取其InvoiceID,如下面的代码所示:
Order order = context.Orders.First();
int invoiceID = order.Invoice.InvoiceID;
int invoiceID = order.InvoiceReference.EntityKey.EntityKeyValues[0].Value;