因此,如果你看看我的模型,在PurchaseOrder中的POCustomerId和Customer中的Id之间存在外键关系。它是在正确的方向定义的,我更改了名称,使其与其他属性名称不同....不重要,因为我在模型中重用了属性名称。
然而,我得到了神秘的内容:“每当我尝试加载这些实体时,”已经添加了具有相同密钥的项目“异常。
如果我删除了一个与其导航属性的关系,那么错误就会消失,所以我已经把这个外键关系归零了。
仅供参考,这是定义PurchaseOrder表的T-sql:
CREATE TABLE [dbo].[PurchaseOrder] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[PONumber] NVARCHAR (MAX) NOT NULL,
[POCustomerId] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_PurchaseOrder_Customer] FOREIGN KEY ([POCustomerId]) REFERENCES [dbo].[Customer] ([Id])
);
编辑:
我能够以两种不同的方式获取代码来产生错误。首先是您看到的模型。在部分类中,我有以下代码加载应用程序的所有采购订单:
static PurchaseOrder()
{
AllPurchaseOrders = new ObservableCollection<PurchaseOrder>(GroveCreekUtilities.Context.PurchaseOrders);
AllPurchaseOrders.CollectionChanged += AllPurchaseOrders_CollectionChanged;
foreach (INotifyPropertyChanged item in AllPurchaseOrders)
item.PropertyChanged += item_PropertyChanged;
}
调用observable集合的构造函数并且实体框架加载采购订单时抛出异常。
由于这不起作用,我从数据库中删除了购买订单和客户之间的关系,并通过部分类向我的purchaseorder类添加了一个observablecollection。奇怪的是,当我尝试通过采购订单的工作订单加载该可观察的集合时,第一个完成产品的客户,同样的异常抛出。在那种情况下,有一些有趣的事情正在发生。我注意到Customer的Id为0,并且它的所有属性都为null,就好像它尚未初始化一样。我可以添加更多代码,我只是不确定要放什么。