实体框架6:已添加具有相同密钥的项目

时间:2014-12-03 03:16:41

标签: c# entity-framework

The Part of the Model that is causing trouble

因此,如果你看看我的模型,在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,就好像它尚未初始化一样。我可以添加更多代码,我只是不确定要放什么。

0 个答案:

没有答案