In a MVC project if I put LINQ queries in Model, is it against the MVC Pattern?
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();
}
}
Or should I move these methods (GetNameById, GetAuthorById) to Controller?
No, it’s not against the MVC pattern. Database queries are perfectly fine in the Model. Obviously a clear distinction should be made between the Model and the View Model that you are passing to your views. The view model should not contain any database specific stuff.
Absolutely not. The controller’s responsibility is not to query a database. A controller responsibility is to talk to the Model, build a view model and pass this view model to the view. A controller shouldn’t even know what a database is.