链接到SQL和类映射

时间:2010-08-02 11:15:44

标签: asp.net-mvc linq-to-sql

我是linq和asp.net mvc的新手,现在我正在开发基于Asp.net mvc的项目 使用Linq to sql作为数据访问技术。但我对使用linq到sql类的方式非常困惑。在dbml文件上为每个实体创建一个新类并在它们之间进行映射并使用新创建的类是很好的做法。我们认为呢?如果不好的做法如何使用数据注释验证实体。

2 个答案:

答案 0 :(得分:1)

我对你的问题很困惑。我假设您通过拖放自动创建dbmls,因此您的所有类都应该已经完成​​。我通常只在MVC中创建一个新模型,如果提供的类没有提供我需要的东西。

您可以在视图中使用强类型绑定到DBML类型,同时仍然分离DAL。我通常将我的DAL放在一个名为 ProjectName.DomainModel 的项目中,将Web UI放在 ProjectName.WebUI 中,并引用* ProjectName.DomainModel **。现在,当我创建一个新视图时,我可以将它强制键入到包含我的dbml的外部库中:

Inherits="System.Web.Mvc.ViewPage<ProjectName.DomainModel.SomeObject>"

另外,对于诸如使用注释进行验证之类的事情,我将其保留在我的DAL中,但是我使用了部分类(这些通常被称为伙伴类,如果我刷新我的dbml,则将它们分开,验证仍然存在。例如,如果我的dbml中有 SomeObject ,我可以添加需要 Name 的验证:

using System.ComponentModel.DataAnnotations;

namespace ProjectName.DomainModel
{
    [MetadataType(typeof(SomeObjectValidation))]
    public partial class SomeObject { }

    public class SomeObject
    {
        [Required(ErrorMessage = "Name is Required")]
        public string Name { get; set; }
    }
}

现在,此验证将与dbml分离并始终可用 - 只需确保它位于同一名称空间中。

但是如果dbml类不能满足你在模型中所需的需求,那么一定要在MVC项目中创建一个新模型,它就是它的用途。执行此操作时,请记住您只需将dbml类添加为新模型的属性,从而避免重写已有的代码。

答案 1 :(得分:1)

Linq To Sql类最好保留在数据层中,然后传递pocos。在这些上,您可以创建包含数据注释的元数据类。您还看到,最佳实践是在UI层(MVC)中使用所谓的 viewmodels 。这些类将信息从传递的pocos映射到专用对象,然后在View中使用。

AutoMapper 是一个很好的工具,可以让您更轻松地完成所有映射。

我也强烈建议你阅读Manning的书ASP.NET MVC 2 in action。我现在强烈建议的另一本书是Pro ASP.NET MVC 3 Framework。