我正在制作一个双语网站,即波斯语(=波斯语)和英语。我创建了两组模型,每组对应一个,并且它们从一个主对象继承。例如,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; }
...
}
(PersianMonth
和EnglishMonth
都是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
但这不起作用:(
任何人都可以帮我解决这个问题吗?
答案 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查询,只需构建表达式树。