我创建了一个非常简单的测试模型,但我遇到了一个问题。
如果我的关系为1到多,则关系为1 - 0 ... 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字段是DB中的自动递增数字,所以我不应该将键设置为某个虚数,然后在保存后会被覆盖?
我做错了吗?
答案 0 :(得分:1)
您应该删除图表中的0 - 0..1
关系。它由您添加的继承替换。请注意,没有相应的Nav属性。
事实证明这是实际错误。