3

我有两节课

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?

4

1 回答 1

7

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

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

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

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

于 2015-02-07T22:20:21.357 回答