违反多重性约束的实体框架6

时间:2018-11-29 09:52:39

标签: c# asp.net-mvc orm entity-framework-6 relational-database

我有一些我不明白的东西。 This与我的情况类似。 我有BaseEntity,Product,Supplier,Contract和ProductSupplierForContract实体,都继承自BaseEntity。

基本实体:

public class BaseEntity
{
    public int ID { get; set; }
    // other properties that are not entities by themself
}

产品实体:

[Required]
public ICollection<Supplier> Suppliers { get; set; }

[Required]
public ICollection<ProductSupplierForContract> ProductSupplierForContracts  { get; set; }

public  ICollection<Contract> Contracts { get; set; }

供应商实体:

public ICollection<ProductSupplierForContract> ProductSupplierForContracts  { get; set; }
public ICollection<Product> Products { get; set; }

ProductSupplierForContract实体:

public string ProductnumberValue { get; set; }    

public Supplier Supplier { get; set; }
public int Supplier_Id { get; set; }

public Product Product { get; set; }
public int Product_Id { get; set; }

public Contract Contract { get; set; }
public int? Contract_Id { get; set; }

合同实体:

[Required]
public ICollection<Product> Products { get; set; }
public ICollection<Supplier> Suppliers { get; set; }
public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }

以下情况必须是可能的,并且允许: 1个合同可以包含来自不同供应商的1个产品BUT的多个实例。 因此,我创建了ProductSupplierForContract(PSFC)实体,该实体将保持 1product-1supplier-1productnumber(值)-1contract 的这种关系。

当我编辑1个已有1个PSFC实例的现有产品,并添加另一个拥有另一个PK,ProductId和SupplierId的PSFC实例时,出现此错误:

{"Multiplicity constraint violated. The role 'ProductSupplierForContract_Product_Target' of the relationship 'ContractCare.Models.ProductSupplierForContract_Product' has multiplicity 1 or 0..1."}

我不明白为什么,因为不是这样我可以拥有

PSFC 1 
PK 1
ProductId 1
SupplierId 1

PSFC 2
PK 2
ProductId 1
SupplierId 2

为什么我(如以上链接文章所述)在产品上具有多对多的PSFC关系?

感谢您的任何反馈! 此致。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

Aparna Gadgil提供的链接上,由Arturo Hernandez发表的评论之一解决了我所遇到的错误,因此由于我的原始问题是错误,因此我将其标记为已解决。

报价:

  

问题是应该为detachedChild.parent分配   attachParent。

foreach(var detachedEntity in detachedEntities)
{
 attachedEntity.ChildEntities.Add(detachedEntity); 
 detachedEntity.ParentEntity = attachedEntity;
}

就我而言,我必须将父实体(我们正在更新的产品)附加到 ProductSupplierForContract.Product 。像答案中所建议的那样创建新实体对我来说已经是事实,而诸如附加它之类的其他事情并没有为我解决。

由于我没有发布有关执行此操作方式的任何代码,因此对帮助我并不是很有帮助,将来我一定会尝试变得更加具体:)。

致以问候,谢谢!