в коде entity framework во-первых, как использовать KeyAttribute для нескольких столбцов
Я создаю модель POCO для использования с entity framework code first CTP5. Я использую украшение, чтобы создать карту свойств для столбца PK. Но как я могу определить PK для более чем одного столбца и, в частности, как я могу контролировать порядок столбцов в индексе? Является ли это результатом порядка свойств в классе?
спасибо!
4 ответа:
вы можете указать порядок столбцов в атрибутах, например:
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 }
Если вы используете
Find
метод aDbSet
вы должны принять этот заказ для ключевых параметров в расчет.
выполнить правильный ответ, представленный 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 }); } }
Если, как и я, вы предпочитаете использовать файл конфигурации, вы можете сделать это следующим образом (на основе примера Манави):
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}); } }
очевидно, что вы должны добавить файл конфигурации в вашем контексте:
public class Ctp5Context : DbContext { public DbSet<User> Users { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new UserConfiguration()); } }