EF6:多个添加的实体可能具有相同的主键

时间:2017-08-30 19:58:34

标签: c# entity-framework entity-framework-6

我继承了数据库,我需要使用EF6插入数据。我收到错误:

[ForeignKey("KitMemberSaleReturnRaw")]
public virtual KitMemberSaleReturnRaw KitMemberSaleReturnRaw { get; set; }

[ForeignKey("KitMemberKitMemberSaleReturnRaw")]
public virtual KitMemberKitMemberSaleReturnRaw KitMemberKitMemberSaleReturnRaw { get; set; }

我使用DataContractSerializer将XML反序列化为POCO对象。 我正在使用xml文档结构中的对象引用来定义关系。 POCO对象是使用NuGet包提供的t4脚本生成的(根本不能与反序列化器一起使用!)

我像这样装饰了KitMemberTaxRaw:

 BasicDataSource ds = new BasicDataSource(); 

 ds.setUsername(user);
 ds.setPassword(getPassword());
 ds.setUrl(jdbcUrl);
 ds.setDriverClassName(driver);
 ds.setMaxTotal(10);
 ds.setValidationQuery("select 1"); //DBCP throws error without this query

KitMemberTaxRaw表可以连接到表KitMemberKitMemberSaleReturnRaw或KitMemberSaleReturnRaw(但不能同时连接到两者)。

EF如何确定'关系的主要结束'?

1 个答案:

答案 0 :(得分:0)

问题原来是EF6无法自动理解包含父级和可选祖父级链接的表。 Microsoft提供的模板生成的导航属性正确但不充分。

为了解决这个问题,我手动为他们不理解的关系创建了临时主键。

注意:我使用的DataContractSerializer类创建了POCO对象,为实例化的导航属性创建了一个数组。我不得不更改模板以生成IList<>属性而不是ICollection<>。在运行时出现错误,因为无法动态调整数组的大小。