我想对可以分配给页面的3个不同标签组使用相同的模型。我想为所有3组使用相同的Controller和Views。
模型
我打算使用TPH,因为这是默认设置。有没有理由不这样做?
public class Tag
{
public int ID {get;set;}
public string TagText {get;set;}
public int PageAssignments {get;set;}
}
public class TagType1: Tag
{}
public class TagType2: Tag
{}
public class TagType3: Tag
{}
public class Page
{
public int ID {get;set;}
public string Title {get;set;}
public string Content {get;set;}
public ICollection<Tag> TagsOfType1 {get;set;}
public ICollection<Tag> TagsOfType2 {get;set;}
public ICollection<Tag> TagsOfType3 {get;set;}
}
控制器
我希望使用BaseController
来执行繁重的工作。
// select and display
public virtual IQueryable<Tag> TagsOfTypeAsQueryable { get; set; }
// add, edit and delete
public virtual DbSet<Tag> TagsOfTypeAsDbSet { get; set; }
public ActionResult Index()
{
List<Tag> allTags = TagsOfTypeAsQueryable.ToList();
return View(allTags);
}
public ActionResult Add(Tag tag)
{
TagsOfTypeAsDbSet.Add(tag);
}
.... more actions that can be used for all 3 types of tag....
派生3个控制器,提供正确的IQueryable或DbSet来操作。
public override DbSet TagsOfTypeAsDbSet
{
get
{
return DB.TagsOfType1;
}
}
public override IQueryable TagsOfTypeAsQueryable
{
get
{
return DB.TagsOfType1.AsQueryable();
}
}
......但问题......
我不允许使用相同类型的3个DbSets:
public DbSet<Tag> TagsOfType1 {get;set;}
public DbSet<Tag> TagsOfType2 {get;set;}
public DbSet<Tag> TagsOfType3 {get;set;}
但是如果我创建3个DbSets,就像这样,我不能使用BaseController来共享3种类型之间的动作:
public DbSet<TagType1> TagsOfType1 {get;set;}
public DbSet<TagType2> TagsOfType2 {get;set;}
public DbSet<TagType3> TagsOfType3 {get;set;}
<小时/> 有没有办法可以让我对所有3种标签使用相同的控制器?