2010-08-02 73 views
2

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

回答

1

Linq To Sql类最好留在数据层中,并且你传递pocos。在这些上你可以创建包含数据注解的元数据类。你也可以看到,最佳做法是使用UI层(MVC)视图模型。这些类是将信息从传递的pocos映射到随后在视图中使用的专用对象的类。

让所有映射更容易的一个好工具是AutoMapper

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

1

我很困惑你的问题。我假设你正在通过拖放来自动创建dbmls,所以你的所有类都应该已经创建好了。我通常只在MVC中创建一个新的模型,如果提供的类不提供我需要的。

在仍然分离DAL的同时,您可以在视图中将强类型绑定用于DBML类型。我通常会将我的DAL放入名为ProjectName.DomainModel的项目以及ProjectName.WebUI中的Web UI,并引用* ProjectName.DomainModel **。现在,当我想提出一个新的观点,我可以把它stronly型到有我的dbml在它的外部库:

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

此外,对于东西,如用注释验证,我一直是单独在我DAL ,但我使用局部类(这些通常被称为哥们类被分开,所以如果我刷新我的dbml,验证停留。例如,如果我有SomeObject上面是我的dbml,我可以添加验证需要一个名称这样的:

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类作为新模型的属性,因此避免重写你已有的代码。

+0

这更好地是直接评论问题本身,而不是作为独立的帖子/回复。 – XIII 2010-08-02 11:28:20

+0

感谢reply.I已通过拖放上它。当表所做的dbml我读MVC好的做法与一些博客,我发现它是更好地使用强类型view.But我有一个观点,通过它我有执行对这些情况下我能做些什么三个不同的表插入?如何创建自定义类并绑定该查看模式吗?和我如何可以使用它们拖放到DBML实体数据注释验证。 – 2010-08-02 11:40:02

+0

现在更新了我的答案,即澄清了问题 – naspinski 2010-08-02 12:10:07