PLINQO - 超级充电 LINQ to SQL






3.79/5 (6投票s)
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 模板:
- 在 Visual Studio 2008 中创建一个新的类库项目。
- 向 Visual Studio 项目添加一个新的 CodeSmith 项目文件(图 1)。
- 为 Dbml.cst 模板向项目文件添加一个新的 Output(图 2)。
- 为 Entities.cst 模板向项目文件添加另一个 Output(图 3)。
- 可选地,为 Managers.cst 模板添加一个 Output(图 4)。
- 将 Sample.csp -> Output Options -> Add Outputs to Project 设置为未选中。模板会自动更新项目。
- 最后,生成 Outputs(图 5)。
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 日:首次发布