我是MVC4的新手,所以一些额外的解释不会受到伤害!谢谢!我正在研究一个简单的MVC4 Web应用程序。我使用Database first方法生成部分类和与数据库的连接。
我正在为我的页面使用ViewModels,但是当我相信它们真的应该在模型中时,我发现自己将LINQ查询放在那里。我知道我不应该触及添加ADO.Net实体数据模型时生成的模型,那么如何扩展这些部分类呢?
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace LottoGen.Models
{
using System;
using System.Collections.Generic;
public partial class Ticket
{
public Ticket()
{
this.TicketNumbers = new HashSet<TicketNumber>();
}
public int TicketId { get; set; }
public string Name { get; set; }
public string UniqueName { get; set; }
public System.DateTime AddDatetime { get; set; }
public int UserId { get; set; }
public virtual ICollection<TicketNumber> TicketNumbers { get; set; }
}
}
这个生成的部分类在/Models/TicketModel.edmx文件夹下命名为Ticket.cs。那么我是否要继续以某种方式继续构建另一个文件夹中的partial类,或者在/ Models文件夹中使用另一个文件名?
或者......我应该在另一个名为“DAL”的文件夹中为数据访问层添加ADO.net实体数据模型,然后继续/ Models中的部分类吗?
这里使用的最佳做法是什么?谢谢!
答案 0 :(得分:0)
不确定这是否会回答您的问题。
MVC是术语中真正基本的设计理念。通过这个我的意思是在实践中并没有告诉你很多,比如胖控制器或瘦子?查看模型?等等。
这是基于意见的建议,因为有替代方案,这取决于项目的范围。
一般来说,你有自己的&#34;实体&#34;或&#34;模型&#34;作为项目的数据存储。 所以一个简单的客户类让我们说有一个ID,FirstName和Surname作为属性。
你有你的View显示数据,例如我想要显示,只是客户的名字,但也许它只是一个全名。 (可能有一个更好的例子)。
我们的模型可以做到,但视图模型呢?视图模型可以与属性Fullname一起使用。现在我们必须把它全部搞定。因此,我们有了Controller,控制器从模型中获取所有这些信息,并将其连接到视图的viewmodel。
现在生病了另一个班级,一个&#34;服务&#34;我称之为课程,但它有很多名字。这是(IMO)逻辑应该在哪里。创建GetAllCustomers(),GetCustomerById,GetCustomerByName,ConcatCustomerName()等逻辑;等等,也许你需要写入数据库?所以抛出更多的linq来做更新,插入和删除方法。
为您的服务添加另一个类,这次是一个界面。
控制器中的使用&#34; Dependancy injection&#34;为了正确地实例化你的服务,这可以保持一切美观和分离。然后在您的Action中,只需调用您的服务,然后迭代以添加到您的视图模型。
这是一个例子,不确定它是否回答了你的问题,但可能会给你一个关于如何进行设计的概述。
答案 1 :(得分:0)
我一直在做的是将我的LINQ查询放入我的控制器而不是模型中。
这样控制器使用LINQ查询构建viewmodel,然后将viewmodel传递给局部视图。
我会在视图上有一个@ Html.Action
@Html.Action("ShowSelectionList", "Category")
哪个会运行通过LINQ查询创建viewmodel的控制器操作,然后将viewmodel传递给局部视图。
public ActionResult ShowSelectionList(int? categoryid)
{
// Save the selected category
ViewBag.categoryId = categoryid;
// Get the categories to display
var viewModel = (from c in categoryrepository.Categories
select new CategorySelectionPartialViewModel()
{
CategoryID = c.CategoryID,
Description = c.Description
}).AsEnumerable();
// Return the partial view
return PartialView("_Categories", viewModel);
}