2011-05-05 69 views
1

我有一个主键超过3列(1 varchar和2整数)的现有表。 我怎样才能告诉实体框架使用这个“钥匙”。 是否有可能使用modelBuilder,属性还是有其他方法?实体框架代码优先:共享主键

谢谢!

回答

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还在内部使用订单。