先使用数据库。我的疑问可能在错误的地方

时间:2014-08-13 14:52:42

标签: c# asp.net asp.net-mvc-4

我是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中的部分类吗?

这里使用的最佳做法是什么?谢谢!

2 个答案:

答案 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);
    }