gpt4 book ai didi

c# - 无法确定保存订单时关系的主体端 - EF6

转载 作者:太空狗 更新时间:2023-10-29 22:22:24 25 4
gpt4 key购买 nike

我正在添加 EF6 并尝试重新创建旧数据库的模型。我也在制作 WCF Web 服务。字段太多,因此我将示例最小化以更好地查明问题。

我正在尝试将一些数据输入数据库以获取订单。订单包括订单行,每个订单行都可以有许可证。 OrderLine 在极少数情况下是一对多的,所以我必须一对多。如果一个 OrderLine 和许可证用于某个部件,则下一个 OrderLine 和许可证用于该部件的维护。零件许可证必须链接到维护许可证。

enter image description here

ParentLicenceId 是问题所在。在我的遗留数据库中,一个许可证与另一个属于 PartType Maintenance 的许可证之间存在关系。因此,如果客户购买了第 X 部分,他们可能会为第 X 部分维护 1 年。因此,第 X 部分维护许可证会将第 X 部分许可证列为其父许可证。

using OrderExample;
using System;
using System.Collections.Generic;

namespace OrderExampleCmd
{
class Program
{
static void Main()
{
var omc = new OrderExampleEntities();
var order = new Order
{
OrderNumber = new Guid().ToString(),
OrderLines = new List<OrderLine>()
};
// Maitenance
var orderLine1 = new OrderLine
{
OrderLineNumber = 1,
Licenses = new List<License>()
};
var orderLine1License = new License
{
LicenseType = "Maintenance"
};
orderLine1.Licenses.Add(orderLine1License);

// Part
var orderLine2 = new OrderLine
{
OrderLineNumber = 2,
Licenses = new List<License>()
};
var orderLine2License = new License
{
LicenseType = "Part",
MaintenanceLicense = orderLine1License
};
orderLine1License.PartLicenses.Add(orderLine2License);

order.OrderLines.Add(orderLine1);
order.OrderLines.Add(orderLine2);

omc.Orders.Add(order);
omc.SaveChanges();
}
}
}

在 omc.SaveChanges() 处出现错误信息,是这样的:

无法确定“OrderExampleModel.LicenseParentLicense”关系的主体端。多个添加的实体可能具有相同的主键。

我试过:

  1. Multiple added entities may have the same primary key但我已经在使用 object 属性而不是 id 属性。

我已经阅读了其他几篇文章。我希望只需要应用一些高级设置。

如何克服此错误以保存这些更改?

最佳答案

错误是由在附加实体中检测到的临时非唯一主键引起的。您需要为订单行分配临时主键和外键。

When a new entity is created, the Entity Framework defines temporary key and sets the IsTemporary property to true. When you call the SaveChanges method, the Entity Framework assigns a permanent key and sets the IsTemporary property to false. - MSDN

默认情况下orderLine1orderLine2有相同的临时主键为0(默认值为整数),你需要将它们设置为临时的以防止2个订单行有相同的临时 ID(即 0)。

orderLine1.OrderLineId = 1;
orderLine1License.OrderLineId = 1;

orderLine2.OrderLineId = 2;
orderLine2License.OrderLineId = 2;

关于c# - 无法确定保存订单时关系的主体端 - EF6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25275832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com