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