我在创建此业务规则的解决方案时遇到了问题。
我目前有1个客户,1个通讯员和1个商店。两者都使用相同的地址表。由于客户端,通讯员和存储表不能具有自动生成的Id,因此我决定使用GUID来避免Address表中出现重复错误。在这种情况下,地址表应如下所示:
AddressId - ReferenceId - Street
1 - GuidOfCorrespondent - St. one
2 - GuidOfStore - St. two
3 - GuidOfCustomer - St. three
但是我在映射实体方面遇到了麻烦。这是我正在尝试做的模板:
AddressMap()
{
HasKey(x => x.AddressId);
Property(x => x.Street)
.IsRequired()
.HasMaxLength(60);
Property(x => x.Number)
.IsRequired();
HasRequired(x => x.Correspondent)
.WithMany(x => x.Adresses)
.HasForeignKey(x => x.ReferenceId);
HasRequired(x => x.Customer)
.WithMany(x => x.Adresses)
.HasForeignKey(x => x.ReferenceId);
HasRequired(x => x.Store)
.WithMany(x => x.Adresses)
.HasForeignKey(x => x.ReferenceId);
}
我收到了这个错误:
INSERT语句与FOREIGN KEY约束“FK_dbo.Address_dbo.Customer_ReferenceId”冲突。冲突发生在数据库\“Correspondent \”,table \“dbo.Customer \”,列'StoreId'
有人可以帮忙吗?
答案 0 :(得分:1)
在插入地址
之前尝试插入所有子实体答案 1 :(得分:0)
如果通讯员的导航属性为地址,那么您可以在填写通讯员的同时填写地址。只需将AddressId放在通讯员上,将AddressId放在地址上即为零。
然后当您作为enity框架插入通讯员时,它将首先插入地址记录,然后填写通讯员上的AddressId,然后插入通讯记录。
答案 2 :(得分:0)
你可能在同一时间插入了客户和地址,在这种情况下你可以简单地插入地址,保存更改然后插入客户你也可以使sql对外键约束不敏感,并使外键列nullabe如果你想在其子实体之前插入实体