试图为使用相同基本抽象类的不同模型创建不同的表格
问题描述:
我有两个模型具有完全相同的字段,但我选择为它们制作不同的模型,因为我需要两个不同的表格,每个表格都有一个。试图为使用相同基本抽象类的不同模型创建不同的表格
早些时候一切工作正常,当我为每个模型有两个不同的表,但后来我开始使用抽象基类,因为这两个模型内的代码是相同的。
现在我有一个包含所有保存的数据的表。
如何为这两个模型创建不同的表格。
public abstract class baseGrammar
{
[Key]
public int Id { get; set; }
[Required]
public string question { get; set; }
[Required]
public string ans { get; set; }
public string ruleId { get; set; }
public string ruleApplicable { get; set; }
[ForeignKey("ruleId")]
public virtual ruleTable RuleTable { get; set; }
}
上面显示的是我的抽象基类。
public class article : baseGrammar
{
}
public class adjective : baseGrammar
{
}
只要有人对ruleTable模型感兴趣。
public class ruleTable
{
[Key]
public string ruleId { get; set; }
public string topic { get; set; }
public string rule { get; set; }
public string example { get; set; }
public virtual ICollection<baseGrammar> BaseGrammar { get; set; }
}
我也加入上下文类,以提供更好的描述
public class english : DbContext
{
public english() : base("name=localServerEng")
{
Database.SetInitializer<DbContext>(null);
Database.SetInitializer<english>(new UniDBInitializer<english>());
}
public virtual DbSet<adjective> adjectiveDb { get; set; }
public virtual DbSet<adverb> adverbDb { get; set; }
public virtual DbSet<alternativeVerb> alternativeVerbDb { get; set; }
public virtual DbSet<antonyms> antonymsDb { get; set; }
public virtual DbSet<article> articleDb { get; set; }
private class UniDBInitializer<T> : DropCreateDatabaseIfModelChanges<english>
{
}
public System.Data.Entity.DbSet<StructureSSC.Areas.AreaEnglish.Models.baseGrammar> baseGrammars { get; set; }
}
Image of SQL Server showing 1 table comprising of all columns instead of different tables
答
[Table("TABLE_NAME")]
你的类将是这样的:
[Table("articles")]
public class article : baseGrammar
{
}
答
您也可以利用OnModelCreating机能的研究
modelBuilder.Entity<baseGrammar>()
.Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<article>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("article");
});
modelBuilder.Entity<adjective>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("adjective");
});
https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with此配置 使用表每混凝土类(TPC)模式-entity-framework-code-first-ctp5-part-2-table-per-type-tpt –
一个抽象类永远不会得到一个表。稍后您可能会添加'abstract'关键字,并且不会运行新的迁移。 –
不,我从一开始就添加了抽象关键字。稍后我刚刚在DbSet之前添加了虚拟关键字,但是我无法弄清楚它做了什么区别。 @ChrisPratt – himanshu