我有几个类需要从一个包含Id的公共基类派生.暂时忽略除了其中一个之外的其他所有内容,让我们说:
public class MyBase {
[Key]
public int Id { get; set; }
}
public class MyName : MyBase {
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的上下文(DataContext)看起来像这样:
public DbSet<MyName>MyNames { get; set; }
// to avoid having EF make a MyBases table and instead map
// MyBase.Id into MyNames and my other derived classes I do this ...
protected override void OnModelCreating((DbModelBuilder modelBuilder) {
modelBuilder.Entity<MyBase>()
.Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<MyName>()
.Map(m => {
m.MapInheritedProperties();
m.ToTable("MyNames");
});
}
Run Code Online (Sandbox Code Playgroud)
生成的数据库,当我启用迁移,添加迁移初始化和更新数据库时,我得不到名为MyBases的表,而是在MyNames中获取Id列 …
我试图使用该context.AddOrUpdate方法播种数据库,但问题是我需要根据多列索引使插入的数据唯一.
[Table("climbing_grades")]
public class ClimbingGrade : EntityBase
{
/// <summary>
/// The name of the climbing grade, e.g.: 7a, VII, etc.
/// </summary>
[Index("IX_Name_GradeType", 1, IsUnique = true)]
public string Name { get; set; }
/// <summary>
/// Tries to display the average difficulty of the described grade.
/// Matching the different grades can be difficult because its always
/// a subjective rating and there exists no norm on converting grades.
/// </summary>
public double Difficulty { get; …Run Code Online (Sandbox Code Playgroud)