EF 4.2 Code First中的复合键

时间:2011-11-16 14:59:23

标签: entity-framework-4.1

我有以下课程并使用EF 4.2 Code First

public class PartAttribute
{
    public Part Part { get; set; }

    public PartAttributeType PartAttributeType { get; set; }

    [Timestamp]
    public byte[] Time { get; set; }

    [Required]
    public string Value { get; set; }
}

public class Part
{
    public Guid Id { get; set; }

    [Required]
    public PartType PartType { get; set; }

    [Required]
    public string SerialNumber { get; set; }

    public string Description { get; set; }

    public ICollection<Team> SelectedTeams { get; set; }
}

public class PartAttributeType
{
    public Guid Id { get; set; }

    [Required]
    public PartType PartType { get; set; }

    [Required]
    public string Name { get; set; }

    public string Description { get; set; }
}

当我构建我的模型时,它会创建三个表以及表格之间的关系,因为我希望/期望它们。我试图在PartAttribute表上创建Part,PartAttributeType和时间之间的复合键,我似乎无法弄明白。当我尝试添加 modelBuilder.Entity<PartAttribute>().HasKey(c => new { c.Part, c.PartAttributeType, c.Time });
我得到一个错误,说Part不是标量类型(它不是)。

1 个答案:

答案 0 :(得分:1)

您需要引入可以同时充当主键的外键属性:

public class PartAttribute
{
    public Guid PartId { get; set; }
    public Guid PartAttributeTypeId { get; set; }

    public Part Part { get; set; }

    public PartAttributeType PartAttributeType { get; set; }

    [Timestamp]
    public byte[] Time { get; set; }

    [Required]
    public string Value { get; set; }
}

然后你的映射:

modelBuilder.Entity<PartAttribute>()
    .HasKey(c => new { c.PartId, c.PartAttributeTypeId, c.Time });

由于命名约定,EF应该能够将新属性识别为两个导航属性的外键。