实体框架代码优先:共享主键

时间:2011-05-05 09:02:14

标签: mapping ef-code-first code-first entity-framework-4.1

我有一个现有的表,主键超过3列(1 varchar和2整数)。 我怎样才能告诉实体框架使用这个“密钥”。 是否有可能使用modelBuilder,属性还是有另一种方式?

谢谢!

1 个答案:

答案 0 :(得分:3)

在流畅的api中,您必须使用匿名类型:

modelBuilder.Entity<YourType>()
            .HasKey(e => new 
                {
                    e.VarChar,
                    e.Int1,
                    e.Int2
                });

其他方式是使用数据注释:

public class YourType
{
    [Key, Column(Order = 0)]
    public string VarChar { get; set; }
    [Key, Column(Order = 1)]
    public int Int1 { get; set; }
    [Key, Column(Order = 2)]
    public int Int2 { get; set; }
}

在两种情况下,列的顺序都很重要。尝试使用DbSet<YourType>.Find后,您必须以相同的顺序提供密钥。 EF也在内部使用订单。