在Entity Framework 4中使用两个密钥,一个身份和一个外部?

时间:2011-11-03 06:59:21

标签: entity-framework entity-framework-4 entity-framework-4.1

是否可以映射具有一个自动递增的标识索引的实体以及将其链接到另一个表的外键?

public class Item
{
    public int ItemID { get; set; }

    [StringLength(20)]
    public string Barcode { get; set; }

    [StringLength(50)]
    public string Name { get; set; }

    [StringLength(50)]
    public string Description { get; set; }

    public decimal Price { get; set; }

    [ForeignKey("ItemCategory")]
    public string CatID { get; set; }

    public virtual ItemCategory ItemCategory { get; set; }        
}

public class ItemCategory
{
    // This should be the identity index
    public int ItemCategoryID { get; set; }

    // This should be the foreign key
    public string CatID { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Item> Items { get; set; }
}

我看到了这个answer - 我应该用modelbuilder配置我的表吗?

1 个答案:

答案 0 :(得分:1)

Item中的外键必须指向ItemCategory中的主键。 EF中的FK与数据库中的FK完全相同。这意味着FK必须指向主体中具有唯一值的属性。问题是EF不支持唯一索引/约束,因此实现唯一性的唯一方法是主键。

因此您无法将FK指向CatID,除非它是主键的一部分,但在这种情况下,您将拥有包含ItemCategoryIDCatID的复合键以及您的Item类将必须包含它们以形成正确的FK。