0

我创建了一个非常简单的测试模型,但遇到了一个问题。

如果我的关系是 1 对多,那么它的关系就是 1 - 0...1。如果我创建超过 1 个对象以从 1 到多侧添加到模型中,则会出现以下异常:

Unable to determine the principal end of the 
'TestModel.FK__Transacti__Trans__023D5A04' relationship. 
Multiple added entities may have the same primary key.

这是我正在处理的模型:

在此处输入图像描述

我用来保存的实体框架代码如下:

using (TestEntities context = new TestEntities())
        {
            // create test sales 
            SalesOrderHeader salesHeader = new SalesOrderHeader();
            salesHeader.Transactions = new List<Transaction>();
            salesHeader.SalesDate = DateTime.Now;

            // create test payment
            TransactionPayment payment = new TransactionPayment();
            payment.SalesOrderHeader = salesHeader;
            payment.TransactionDate = DateTime.Now;

            // attach the payment to the sale
            salesHeader.Transactions.Add(payment);

            // create another test payment
            payment = new TransactionPayment();
            payment.SalesOrderHeader = salesHeader;
            payment.TransactionDate = DateTime.Now;
            
            // attach the 2nd payment to the sale
            salesHeader.Transactions.Add(payment);

            // add the sale to the context and save the changes
            context.SalesOrderHeaders.AddObject(salesHeader);
            context.SaveChanges();
        }

该模型基本上显示,我们有 1 个销售标题。对于每个销售标题,我们有多个交易对象。并且每个交易对象都可以是交易支付类型。忽略这个模型的简单性,它是我正在尝试做的一个主要缩减版本,但它与真实模型完全相同。

因此,交易支付继承自交易,并且我删除了交易支付的主键,因为它与交易的关键......即“TransactionID”列。

如果我一次保存一笔交易,它将起作用。如果我在两个支付对象上手动将交易 ID 设置为不同的数字,它就可以工作。但是,如果我不设置密钥,我会得到该异常。ID 字段是数据库中的自动递增数字,所以我真的不应该将密钥设置为某个虚构的数字,然后肯定会在保存后被覆盖?

有什么我做错了吗?

4

1 回答 1

1

您应该删除0 - 0..1图中的关系。它被您添加的继承所取代。请注意,没有相应的 Nav 属性。

事实证明,这是真正的错误。

于 2013-09-24T16:35:25.607 回答