尝试为使用相同基本抽象类

时间:2017-07-27 15:01:36

标签: c# asp.net-mvc entity-framework dbcontext base-class

我有2个模型具有完全相同的字段,但我选择为它们制作不同的模型,因为我需要两个不同的表,每个表一个。

早些时候,当每个模型有两个不同的表时,一切都工作正常,但后来我开始使用抽象基类,因为两个模型中的代码都是相同的。

现在我有一个由我保存的所有数据组成的表。

如何为这两个模型创建不同的表。

 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

2 个答案:

答案 0 :(得分:0)

添加table data annotation

[Table("TABLE_NAME")]

您的课程将如下:

[Table("articles")]
public class article : baseGrammar
{

}

答案 1 :(得分:0)

您可以使用此配置使用Table-Per-Concrete Class(TPC)Pattern  on OnModelCreating fuction

  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"); 
 });