65.9K
CodeProject 正在变化。 阅读更多。
Home

PLINQO - 超级充电 LINQ to SQL

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.79/5 (6投票s)

2007年8月17日

CPOL

6分钟阅读

viewsIcon

53019

downloadIcon

159

PLINQO 是一组 CodeSmith 模板,用于替代和扩展 LINQ to SQL 设计器。

概述

PLINQO(意为 Professional LINQ to Objects)是一组 CodeSmith 模板,用于替代和扩展 Visual Studio 2008 中包含的 LINQ to SQL 设计器。

特点

这些模板具有以下功能:

  • 根据数据库架构生成或更新 LINQ to SQL 的 DBML 文件。
    • 包含所有表、存储过程、函数和视图,并能根据正则表达式模式排除对象。
    • 能够自动删除对象的名称前缀和后缀(例如 tbl_usp_)。
    • DBML 文件仍可使用标准的 Visual Studio 2008 设计器进行自定义。
    • DBML 文件可基于当前数据库架构刷新,而不会丢失自定义设置。(请参阅安全属性)
  • 生成 LINQ to SQL 的 DataContext 类。
  • 生成 LINQ to SQL 的实体类。
    • 每个实体生成一个文件,而不是一个庞大的文件。
    • 生成部分类,可以在其中编写自定义代码,而不会被覆盖。
    • 生成的实体文件会以代码隐藏文件的形式添加到项目中,对应其自定义实体文件。
  • 生成实体管理器类。
    • 添加可自定义的业务规则引擎,以强制执行实体验证、业务和安全规则。
    • 提供基于主键、外键和索引的常用查询访问。
    • 常用查询以 IQueryable 的形式暴露,以便进行扩展。
  • 所有模板都可以根据您的需求进行自定义。

快速入门

使用以下步骤开始使用 LINQ to SQL 模板:

  1. 在 Visual Studio 2008 中创建一个新的类库项目。
  2. 向 Visual Studio 项目添加一个新的 CodeSmith 项目文件(图 1)。

    Screenshot - SampleSolution.png

  3. Dbml.cst 模板向项目文件添加一个新的 Output(图 2)。

    Screenshot - dbml.jpg

  4. Entities.cst 模板向项目文件添加另一个 Output(图 3)。

    Screenshot - entities.jpg

  5. 可选地,为 Managers.cst 模板添加一个 Output(图 4)。

    Screenshot - managers.jpg

  6. Sample.csp -> Output Options -> Add Outputs to Project 设置为未选中。模板会自动更新项目。
  7. 最后,生成 Outputs(图 5)。

    Screenshot - SampleGeneratedSolution.png

Dbml.cst 模板

Dbml.cst 模板用于创建 LINQ to SQL 的 DBML 文件。该文件符合 Microsoft 的 DbmlSchema.xsd 架构。这是 LINQ to SQL 设计器使用的相同文档。此模板生成的 DBML 文件也可以在 LINQ to SQL 设计器中进行编辑。

如果文件不存在,该模板会创建一个新文件。如果文件已存在,该模板会读取并更新它。这样您就可以对文件进行更改,并且在模板重新运行时不会被覆盖。但是,只有部分属性可以安全地避免被覆盖。以下是安全属性列表,以 XPath 形式列出:

DBML 文件中可更改的安全属性...

  • Database/@Class - 将生成的 DataContext 类的名称。
  • Database/@EntityNamespace - 实体类的命名空间。
  • Database/@ContextNamespace - DataContext 类的命名空间。
  • Table/@Member - DataContext 类中表的属性名称。
  • Type/@Name - 实体类的名称。
  • Column/@Member - 实体类中列的属性名称。
  • Column/@Storage - LINQ to SQL 将用于为值赋值的私有字段。
  • Association/@Member - 此关联的属性名称。
  • Association/@Storage - LINQ to SQL 将用于为关联赋值的私有字段。
  • Function/@Method - 数据库过程方法的名称。
  • Parameter/@Parameter - 映射到数据库过程参数的方法参数名称。

警告:请注意,模板会删除数据库中未找到的表、列和关联。

Dbml.cst 模板的属性

属性 描述
CleanExpression 用于清理表、视图、列和过程名称的正则表达式列表。找到的任何匹配文本都将从名称中删除。
IgnoreList 用于在生成映射时忽略表、视图和过程的正则表达式列表。任何匹配这些正则表达式的数据库对象都将被忽略。
IncludeFunctions 在映射中包含存储过程和用户函数。
IncludeViews 在映射中包含视图。
SourceDatabase 用于生成 DBML 文件的源数据库。
ContextNamespace 用于上下文类文件的命名空间。
EntityNamespace 用于实体类文件的命名空间。
DbmlFile 要生成的 DBML 文件的路径。

Entities.cst 模板

实体模板生成 LINQ 所需的实体类。这些类是从 DBML 文件生成的。您可以通过编辑 DBML 文件来修改类和属性的名称。有关 DBML 文件中可安全修改的属性列表,请参阅 Dbml.cst

该模板将为 DBML 文件中的每个 Type 生成两个文件。一个文件是生成的、无法修改的部分类,因为它会在模板重新运行时被覆盖。其文件名将是... <entity>.Generated.cs

第二个文件是一个可修改的部分类,因为它不会被重新生成。您可以在此文件中实现部分方法。默认会创建一些部分方法存根。此文件将命名为... <entity>.cs

如果为模板设置了项目文件属性,则生成的代码会添加到项目中。无法修改的文件会隐藏在可修改的文件下方。

Entities.cst 模板的属性

属性 描述
DbmlFile 用于从 DBML 文件生成实体的路径。
OutputDirectory 保存生成文件的文件夹。
ProjectFile 要将生成的文件添加到其中的 Visual Studio 项目文件。

Managers.cst 模板

管理器模板用于帮助您开始为 LINQ 实体编写业务逻辑。管理器将包含从表中的键和索引创建的常用查询。管理器还将为实体属性提供规则,以确保必填字段不为空,并且字符串的长度不超过列允许的最大长度。

该模板通过创建一个具有 Manager 属性的第二个 DataContext 类来工作。然后,管理器将为每个具有管理器的实体提供一个属性。以下是使用管理器的语法示例:

SampleManagerContext db = new SampleManagerContext();
// use the primary key
Task task = db.Manager.Task.GetByTaskID(taskId);
// use a foreign key
var myTasks = db.Manager.Task.GetByAssignedID(userId);
// the methods return IQueryable so you can add expressions
var openTasks = db.Manager.Task.GetByStatusID(statusId).OrderBy(t => t.CreateDate);

管理器还为您的实体提供了业务规则引擎。除了生成的默认验证规则外,您还可以通过在自定义实体类中实现 AddRules 部分方法来添加自定义规则。

static partial void AddRules()
{
  // Rule allows the Name property to be a max of 150 characters.
  RuleManager.AddShared<Task>(new LengthRule("Name", 150));
  // Rule that validates the value of the property using regex.
  RuleManager.AddShared<Task>(new RegexRule("Name", ".*"));
  // Rule allows only users in certain security roles to update.
  RuleManager.AddShared<Task>(new UpdateRule(
    new string[] { "Administrator", "Updaters" }));
}

Managers.cst 模板的属性

属性 描述
SourceDatabase 用于生成管理器类的键和索引的源数据库。
DbmlFile 用于从 DBML 文件生成管理器类的路径。
ManagerContextName 支持管理器的 DataContext 的类名。
ManagerDirectory 保存生成管理器文件的文件夹。
ManagerNamespace 用于生成管理器类文件的命名空间。
ProjectFile 要将生成的文件添加到其中的 Visual Studio 项目文件。

已知问题

  • 生成的 DataContext 不像 LINQ to SQL 设计器那样设置连接字符串。

路线图

  • 改进管理器模板
  • 单元测试生成
  • Web 服务生成
  • ASP.NET、Winforms 和 WPF UI 生成
  • Visual Basic 支持

历史

  • 2007 年 8 月 17 日:首次发布
© . All rights reserved.