首先在entity framework代码中,如何在多个列上使用KeyAttribute

我正在创build一个POCO模型,首先使用实体​​框架代码CTP5。 我正在使用装饰来制作属性映射到PK列。 但是我怎样才能在一列以上定义一个PK,具体来说,我怎样才能控制索引中列的顺序? 这是课堂教学秩序的结果吗?

谢谢!

您可以在属性中指定列顺序,例如:

public class MyEntity { [Key, Column(Order=0)] public int MyFirstKeyProperty { get; set; } [Key, Column(Order=1)] public int MySecondKeyProperty { get; set; } [Key, Column(Order=2)] public string MyThirdKeyProperty { get; set; } // other properties } 

如果您正在使用DbSetFind方法, DbSet必须考虑关键参数的这个顺序。

要完成Slauma提交的正确答案,可以使用HasKey方法指定组合主键的顺序:

 public class User { public int UserId { get; set; } public string Username { get; set; } } public class Ctp5Context : DbContext { public DbSet<User> Users { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>().HasKey(u => new { u.UserId, u.Username }); } } 

如果像我一样,你更喜欢使用configuration文件,你可以这样做(基于Manavi的例子):

 public class User { public int UserId { get; set; } public string Username { get; set; } } public class UserConfiguration : EntityTypeConfiguration<User> { public UserConfiguration() { ToTable("Users"); HasKey(x => new {x.UserId, x.Username}); } } 

显然你必须将configuration文件添加到你的上下文中:

 public class Ctp5Context : DbContext { public DbSet<User> Users { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new UserConfiguration()); } } 
Interesting Posts