2017-07-27 73 views
0

我有兩個模型具有完全相同的字段,但我選擇爲它們製作不同的模型,因爲我需要兩個不同的表格,每個表格都有一個。試圖爲使用相同基本抽象類的不同模型創建不同的表格

早些時候一切工作正常,當我爲每個模型有兩個不同的表,但後來我開始使用抽象基類,因爲這兩個模型內的代碼是相同的。

現在我有一個包含所有保存的數據的表。

如何爲這兩個模型創建不同的表格。

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

+1

https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with此配置 使用表每混凝土類(TPC)模式-entity-framework-code-first-ctp5-part-2-table-per-type-tpt –

+1

一個抽象類永遠不會得到一個表。稍後您可能會添加'abstract'關鍵字,並且不會運行新的遷移。 –

+0

不,我從一開始就添加了抽象關鍵字。稍後我剛剛在DbSet之前添加了虛擬關鍵字,但是我無法弄清楚它做了什麼區別。 @ChrisPratt – himanshu

回答

0

您也可以利用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"); 
}); 
相關問題