Сопоставление составных ключей с использованием кода EF сначала


таблица Sql server:

SomeId PK varchar(50) not null 
OtherId PK int not null

Как я должен сопоставить это в коде EF 6 сначала?

public class MyTable
{
    [Key]
    public string SomeId { get; set; }

    [Key]
    public int OtherId { get; set; }
}

Я видел несколько примеров, где вы должны установить порядок для каждого столбца, это необходимо?

есть ли официальная документация по этому поводу где-нибудь?

3 69

3 ответа:

вам определенно нужно поместить в порядок столбцов, иначе как SQL Server должен знать, какой из них идет первым? Вот что вам нужно сделать в вашем коде:

public class MyTable
{
  [Key, Column(Order = 0)]
  public string SomeId { get; set; }

  [Key, Column(Order = 1)]
  public int OtherId { get; set; }
}

вы также можете посмотреть это так вопрос. Если вам нужна официальная документация, я бы рекомендовал посмотреть на официальный сайт EF. Надеюсь, это поможет.

EDIT: я только что нашел сообщение в блоге от Джули Лерман со ссылками на все виды EF 6 goodness. Вы можете найти все, что вам нужно здесь.

для сопоставления составного первичного ключа с помощью Entity framework мы можем использовать два подхода.

1) путем переопределения метода OnModelCreating ()

например: у меня есть класс модели с именем VehicleFeature, как показано ниже.

public class VehicleFeature
{
    public int VehicleId { get; set; }
    public int FeatureId{get;set;}
    public Vehicle Vehicle{get;set;}
    public Feature Feature{get;set;}
}

код в моем DBContext будет выглядеть так,

public class VegaDbContext : DbContext
{
    public DbSet<Make> Makes{get;set;}

    public DbSet<Feature> Features{get;set;}
    public VegaDbContext(DbContextOptions<VegaDbContext> options):base(options)        
    {           

    }
    // we override the OnModelCreating method here.
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<VehicleFeature>().HasKey(vf=> new {vf.VehicleId, vf.FeatureId});
    }
}

2) При Примечания Данные.

public class VehicleFeature
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
    [Key]
    public int VehicleId { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]   
    [Key]
    public int FeatureId{get;set;}
    public Vehicle Vehicle{get;set;}
    public Feature Feature{get;set;}
}

пожалуйста, обратитесь к приведенным ниже ссылкам для получения дополнительной информации.

1) https://msdn.microsoft.com/en-us/library/jj591617 (v=vs. 113). aspx

2) как добавить составной уникальный ключ с помощью EF 6 Fluent Api?

через настройки можно сделать так:

Model1
{
    int fk_one,
    int fk_two
}

Model2
{
    int pk_one,
    int pk_two,
}

тогда в контексте config

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Model1>()
            .HasRequired(e => e.Model2)
            .WithMany(e => e.Model1s)
            .HasForeignKey(e => new { e.fk_one, e.fk_two })
            .WillCascadeOnDelete(false);
    }
}