我有兩個模型具有完全相同的字段,但我選擇爲它們製作不同的模型,因爲我需要兩個不同的表格,每個表格都有一個。試圖爲使用相同基本抽象類的不同模型創建不同的表格
早些時候一切工作正常,當我爲每個模型有兩個不同的表,但後來我開始使用抽象基類,因爲這兩個模型內的代碼是相同的。
現在我有一個包含所有保存的數據的表。
如何爲這兩個模型創建不同的表格。
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
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