6

在 MVC 项目中,如果我将LINQ查询放入Model,是否违反 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 中吗?

4

2 回答 2

8

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

不,这不违反 MVC 模式。数据库查询在模型中非常好。显然,应该在传递给视图的模型和视图模型之间做出明确的区分。视图模型不应包含任何特定于数据库的内容。

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

绝对不。控制器的职责不是查询数据库。控制器的职责是与模型对话,构建视图模型并将此视图模型传递给视图。控制器甚至不应该知道数据库是什么。

于 2012-07-11T05:29:45.223 回答
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();
    }
于 2012-07-13T21:38:33.817 回答