1控制器处理2个模型,ASP.NET,MVC5

时间:2015-03-03 15:09:33

标签: asp.net-mvc

我正在制作一个双语网站,即波斯语(=波斯语)和英语。我创建了两组模型,每组对应一个,并且它们从一个主对象继承。例如,Book类:

public class Book
{
    public int id { get; set; }
    public string title { get; set; }
    ...
}

public class Book_fa : Book {
    public PersianMonth? month { get; set; }
    ...
}

public class Book_en : Book { 
    public EnglishMonth? month { get; set; }
    ...
}

PersianMonthEnglishMonth都是enum

这些对象存储在两个表中:

public class myDbContext : DbContext
{
    public myDbContext()
        : base("name=myDbName")
    {
    }

    public DbSet<Book_fa> Books_fa { get; set; }
    public DbSet<Book_en> Books_en { get; set; }
}

我可以为每个对象创建一个单独的控制器和视图。例如,Delete中的Book_faController操作:

private myDbContext db = new myDbContext();

public ActionResult Delete(int id)
{
    Book_fa book_fa = db.Books_fa.Find(id);
    db.Books_fa.Remove(book_fa);
    db.SaveChanges();
    return RedirectToAction("Index");
}

Delete中的Book_enController操作是相同的!除了必须更改为db.Books_fa的{​​{1}}字词外。对于任何其他操作(创建,编辑,列表......)都是如此。

所以我决定只使用一个控制器来处理这些双语书籍!我试过这个:

db.Books_en

但这不起作用:(

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您可以从IDbSet<Book>方法返回GetTable

private IDbSet<Book> GetTable(string lang)
{
    return lang == "fa" ? (IDbSet<Book>)db.Books_fa : (IDbSet<Book>)db.Books_en;
}

现在,您可以使用此方法的结果使用所有OrderBy,ToList,...方法,以便您可以继续过滤结果,而无需急切执行SQL查询,只需构建表达式树。