首先使用数据库.我可能问错地方了
本文关键字:数据库 | 更新日期: 2023-09-27 18:17:45
我是MVC4的新手,所以一些额外的解释不会伤害!谢谢你!我在一个简单的MVC4网络应用程序工作。我使用数据库第一方法来生成部分类和连接到我的数据库。
我使用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下的Ticket.cs。edmx文件夹。所以我想继续在另一个文件夹中构建部分类,还是在/Models文件夹中使用另一个文件名?
还是……我是否应该在另一个名为"DAL"的文件夹中添加ADO.net实体数据模型用于数据访问层,然后继续在/模型中的部分类?
在这里使用的最佳实践是什么?谢谢!
不确定这是否能回答你的问题。
MVC在术语上是非常基本的设计概念。我的意思是在实践中没有告诉你很多,比如胖控制器还是瘦控制器?视图模型?等等。这是一个基于意见的建议,因为有其他选择,这取决于项目的范围。
一般来说,你有你的"实体"或"模型"作为你的项目的数据存储。假设一个简单的客户类有ID,FirstName和姓氏作为属性。
你有你的视图显示数据,例如我想显示,只是客户的名字,但可能只是一个全名。(可能有一个更好的例子)。
我们的模型可以做到这一点,但是视图模型呢?视图模型可以与属性Fullname一起使用。现在我们要把它们连接起来。我们有控制器,控制器从模型中获取所有这些信息,并将其连接到视图的视图模型
现在我将引入另一个类,我称之为"服务"类,但它有许多名称。在我看来,这就是逻辑所在。创建逻辑,如GetAllCustomers(), GetCustomerById, GetCustomerByName, ConcatCustomerName();等等,也许你也需要写数据库?所以要加入更多的linq来执行Update, Insert和delete方法。
为您的服务添加另一个类,这次是接口。
使用"依赖注入"来正确地实例化你的服务,这使一切都保持良好和解耦。然后在你的Action中,简单地调用你的服务,并迭代添加到你的视图模型。这是一个例子,不确定它是否回答了你的问题,但可能会给你一个关于如何进行设计的概述。
我一直在做的是把我的LINQ查询到我的控制器,而不是在模型。
这样,控制器使用LINQ查询构建视图模型,然后将视图模型传递给分部视图。
我将有一个@Html。视图上的动作
@Html.Action("ShowSelectionList", "Category")
它将运行通过LINQ查询创建视图模型的控制器动作,然后将视图模型传递给部分视图。
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);
}