Сопоставление составных ключей с использованием кода 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 ответа:
вам определенно нужно поместить в порядок столбцов, иначе как 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); } }