2012-07-11 73 views
4

在MVC项目中,如果我在Model中插入LINQ查询,是否违反了MVC模式?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(); 
     } 
    } 

或者我应该将这些方法(GetNameByIdGetAuthorById)来控制?

回答

6

在MVC项目中,如果我将LINQ查询放入模型中,是否违背了MVC模式?

不,这不是对MVC模式。数据库查询在模型中非常好。显然,应明确区分型号和要传递给你的意见视图模型之间进行。视图模型不应该包含任何数据库特定的东西。

或者我应该将这些方法(GetNameById,GetAuthorById)移动到控制器?

绝对不是。控制者的责任不是查询数据库。控制器的责任是交谈的模型,建立一个视图模型,并通过该视图模型的视图。控制器甚至不应该知道数据库是什么。

1

为ASP.NET MVC应用程序构建模型时,始终使用存储库模式是一种很好的做法,以便DAL层容易根据需要进行更改和测试。当您使用库模式,您创建一个包含所有与约束你的数据库访问逻辑凝乳独立的存储设备类。

当我们创建repository类,我们创建了一个代表所有由repository类所使用的方法的接口。在控制器中,我们根据接口而不是存储库编写代码。

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