我有一个现有的表,主键超过3列(1 varchar和2整数)。 我怎样才能告诉实体框架使用这个“密钥”。 是否有可能使用modelBuilder,属性还是有另一种方式?
谢谢!
答案 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也在内部使用订单。