我创建了一个非常简单的测试模型,但遇到了一个问题。
如果我的关系是 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 字段是数据库中的自动递增数字,所以我真的不应该将密钥设置为某个虚构的数字,然后肯定会在保存后被覆盖?
有什么我做错了吗?