如何为LINQ to SQL生成类?

时间:2011-07-13 00:30:07

标签: linq linq-to-sql sqlmetal

我正在使用linq to sql for my mvc 3 project。有几种方法可以生成域模态类文件。

  1. sqlmetal
  2. 对象关系设计器
  3. 手动代码
  4. 我总是手动编写那些模型类文件。因为sqlmetal或designer生成的文件很乱。你怎么看?最好的方法是什么。

    编辑:

    我使用的是MVC 3,而不是2.也许我错了,但这就是我验证的方式。无论如何,我最终会编写所有这些类文件,那么使用工具生成它们的重点是什么?

    public class User
    { 
        [Required]
        public string Password { get; set; } 
        [Required, Compare("Password")] 
        public string ComparePassword { get; set; } 
    }
    

2 个答案:

答案 0 :(得分:4)

我们在多个数据库(一台服务器)上有数百个表。我们先进行表格开发,将表格拖到不同的DBML设计器文件中,每个文件夹在不同的文件夹中,代表每个项目中不同的命设计器文件被标记为不编译,我们使用自定义构建的T4模板,通过读取项目中的任何DBML文件来生成我们的代码。这使我们可以完全控制生成的代码,因此我们可以执行诸如实现接口之类的操作(IAuditable是我们拥有CreatedBy,CreatedDate,ModifiedBy,ModifiedDate的一个示例)。我们也可以通过这种方式将System.ComponentModel.DataAnnotations放在我们的Linqed对象上,而无需诉诸Buddy Classes。我们有第二个T4模板负责从数据库中刷新DBML,因此我们可以确保表具有3部分前缀(db.schema.tbl),因此我们不必删除并重新添加到数据库中。设计师。 XML只是在读取db模式和更新DBML时才会发生变化。我们还为每个POCO生成一个存储库/管理器对象,它具有一些常见的查询操作,如GetByID(),还可以处理提交和审计日志记录。这些管理器扩展了您需要针对每个表编写的所有自定义查询,并且它们拥有DataContext。这种设计有时被称为“妈咪 - 我 - 我?”方法,Linqed到表的对象必须要求其经理为它做所有事情。

我发现这是一种非常灵活多变的L2S方式,它使我们的后端开发变得轻而易举,因此我们可以专注于用户体验。唯一的缺点是,如果我们跨命名空间进行关联,则必须自己手动将这些关联添加到部分类中,否则您必须将该外部表添加到另一个DBML才能绘制关联。这实际上并不是一件坏事,因为我们真正想到了命名空间的特殊性并减少了额外的命名空间。使用T4这种方式是开发DRY的好方法(不要重复自己)。表定义是您需要更改结构的唯一位置,并且它都是传播。验证在一个地方,即POCO。查询在一个地方,经理。如果你想做类似的事情,here's a good place to start

答案 1 :(得分:0)

即使设计师生成的课程很乱,对你来说有什么关系?

我敢说,绝对没有必要打开其中一个设计文件。

如果你需要扩展模型中定义的任何实体,它们都是部分类,所以你可以创建自己的同名部分类并实现你的东西......

当我使用L2S时,我只使用设计师。