EF Code First:主键与外键相同

时间:2013-02-25 07:16:31

标签: entity-framework ef-code-first fluent-interface

我有两个班级

public class Product
{
    public Guid Id { get; set; }
    public string ProductDetails { get; set; }
}

public class SpecialProductDetails
{
    public Guid Product_Id { get; set; } // PK and FK to Product class
    public string SpecialName { get; set; }
    public string SpecialDescription { get; set; }

    public virtual Product Product { get; set; }
}

SpecialProductDetailsProduct类映射为1-1,并且是可选的。它共享相同的PrimaryKey和ForeignKey。

在Fluent API中,我正在映射此关系(在SpecialProductDetails内)

public SpecialProductDetails()
{
    HasKey(p => p.Product_Id);
    HasRequired(p => p.Product).WithMany().HasForeignKey(p => p.Product_Id).WillCascadeDelete(true);
}

这在尝试生成数据库时给出了这个错误

\ tSystem.Data.Entity.Edm.EdmAssociationEnd ::多重性在关系'SpecialProductDetails_Product_Source'中的角色'SpecialProductDetails_Product_Source'中无效。由于“从属角色”是指关键属性,因此从属角色的多重性的上限必须为“1”。

如何在EF Code First上将列设置为PK和FK?

1 个答案:

答案 0 :(得分:7)

我很确定你已经解决了这个问题,但我遇到了同样的问题,我发现的解决方案是:

 public SpecialProductDetails()
    {
        HasKey(p => p.Product_Id);
        HasRequired(p => p.Product).WithOptional();
    }

“值得注意的是,当我们使用流畅的API映射一对一关联时,我们不需要像在使用HasForeignKey方法映射一对多关联时那样指定外键。由于EF仅支持主键上的一对一关联,因此它将自动在主键上的数据库中创建关系。“

http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-3-shared-primary-key-associations

之后