在MVC项目中,如果我在Model
中放置 LINQ 查询,是否违反了MVC模式?
namespace DocLibrary.Models
{
public class Author
{
private DocLibraryContext db = new DocLibraryContext();
[Key]
public Int32 AuthorId { get; set; }
[StringLength(20)]
public String Name { get; set; }
..
public string GetNameById(int AuthorId)
{
var query = from a in db.Author
where a.AuthorId == AuthorId
select a.Name;
return query.FirstOrDefault();
}
public Author GetAuthorById(int AuthorId)
{
var query = from a in db.Author
where a.AuthorId.Equals(AuthorId)
select a;
return query.FirstOrDefault();
}
}
或者我应该将这些方法(GetNameById
,GetAuthorById
)移动到Controller?
答案 0 :(得分:7)
在MVC项目中,如果我在模型中放置LINQ查询,它是否违反MVC模式?
不,这不符合MVC模式。数据库查询在模型中完全没问题。显然,您要传递给视图的模型和视图模型之间应该有明显的区别。视图模型不应包含任何特定于数据库的内容。
或者我应该将这些方法(GetNameById,GetAuthorById)移动到Controller?
绝对不是。控制器的职责不是查询数据库。控制器的职责是与模型通信,构建视图模型并将此视图模型传递给视图。控制器甚至不应该知道数据库是什么。
答案 1 :(得分:1)
在为ASP.NET MVC应用程序构建Model时,始终优先使用Repository模式,以便DAL层易于更改并根据需要进行测试。使用存储库模式时,您将创建一个单独的存储库类,其中包含具有约束的所有数据库访问逻辑CURD。
当我们创建存储库类时,我们创建一个接口来表示存储库类使用的所有方法。在控制器中,我们针对接口而不是存储库编写代码。
答案 2 :(得分:1)
像这样使用
internal IQueryable<Table1> GetArmyList2()
{
//var lists = from list in db.Table1
// select list;
//return lists;
var query = from Table1 in db.Table1
where Table1.Username.Equals("asik") & Table1.Password.Equals("asik")
select Table1;
return query;
}
和控制器代码
public ActionResult asik()
{
var armyList = cl.GetArmyList2();
return View(armyList);
// return View();
}