首先使用数据库.我可能问错地方了

本文关键字:数据库 | 更新日期: 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);
    }