VS2010中创建自定义SQL Rule

简介: VS2010已经发布几天时间了,一些新的特性特别引人注目,比如: l         性能的稳定和提升,表现在WPF GUI和WPF文本呈现。 l         Windows Azure Tools模板。

VS2010已经发布几天时间了,一些新的特性特别引人注目,比如:

l         性能的稳定和提升,表现在WPF GUIWPF文本呈现。

l         Windows Azure Tools模板。

l         多显示器支持,输出窗口,类图窗口,代码定义窗口等提供辅助信息的窗口放置在副显示器中。

l         对并行计算开发的大量支持。

l         包含了SharePoint的项目模板和调试支持。

l         用于SilverlightWPF的拖放绑定支持。

l         C++ IDE的增强:通过简单的拖放操作,就能生成稳健的Windows窗体应用程序。

l         通过并行安装以向后兼容.NET 3.5

l         F#语言的支持,JavaScript智能感知引擎等等。

除去以上特性,创建自定义SQL Rule也有所变化。本文就如何在VS2010中创建SQL Rule进行说明 。

1.      什么是Visual Studio Database Edition以及特性。

Visual Studio Database Edition(以下简称VSDB)是针对典型的数据库开发任务而设计的,可以对原有数据库反向工程,添加表,存储过程和其他数据库项目,而且有选择性地将修改部署到目标数据库中。他的主要特性有:

1.1模型对比(Schema Compare

在项目的维护和升级期间,至少需要维护产品数据库(正在正式运营的数据库)、测试数据库、开发数据库这三个数据库,那开发数据库结构变更后,如何同步到其他两个数据库上呢?模型对比功能可以很好地解决此问题。如果开发数据库结构变更,可以通过选择菜单的Data Schema Compare Filter中选择Different Objects, Missing Objects or New Objects来过滤列表。这个过滤可以使我们快速地看到哪些修改需要更新到目标数据库中。然后我们可以保存修改脚本到一个文件中,并在T-SQL编辑器或者直接将修改精写入到目标数据库。

 

1.2数据对比(Data Compare

    用来比较两个数据库的表或者视图中数据是否相同,可进行比较的前提是数据库名称一致、表具有相同的主键、唯一索引或唯一约束。比较完后可以对修改保存到目标数据库或者脚本。这个特性可以将产品数据库的数据导入到开发数据库或者测试数据库,以便于开发和测试。

 

1.3数据生成计划(Data Generation Plans

在项目中,开发团队每周至少一次提交版本到测试环境,测试人员针对新的数据结构如何快速生成测试基础数据呢? 数据生成计划会解决此问题。在数据生成计划计划中,我们要定义生成数据的表、每一个表要生成的记录行数和要插入数据的类型。数字类型比较容易生成,针对特殊的数据比如Email、电话号码可以通过正则表达式RegEx完成。

 

1.4重构(Refactor

    主要用来重命名数据库对象,比如数据库名称,表名称,视图名称。当要重命名的对象改变后,对此对象的引用都会相应地改变。

2.      如何自定义SQL Rule

随着时代的进步及其全球化,企业业务越来越复杂,造成软件项目也越来越庞大,软件开发再也不是单枪匹马的时代,靠一两个人是完成不了任务的,软件工厂模式是一个趋势,软件工厂生产线是一个方向,软件的生成就可以像普通的产品一样,流转过整个生产线后,已经定型并被客户部署上线。庞大的生产线,庞大的队伍,各式各样的编程习惯,如何保证生产线的效率和软件产品质量,无规矩不成方圆,代码编写规范是其中很重要的一个规矩,数据库命名规范也是代码编写规范里面比较重要的组成部分,VSDB可以很好地解决这个问题,强制要求开发人员按照数据库规范来对数据库对象命名。接下来让我们看看如何解决这个问题。

2.1生成强命名类

调用命令行程序(路径=系统盘:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\) sn.exe -k FRIMLEC.text.snk

然后把创建好的FRIMLEC.text.snk加入的工程中。设置参见下图(选中工程右键--Properties--Signning)

 

提示使用强名称对程序集进行签名将向包含程序集清单的文件添加公钥加密。强名称签名帮助验证名称的唯一性,避免名称欺骗,并在解析引用时向调用方提供唯一标识。但是,任何信任级别都不会与一个强名称关联。

 

2.2引入类库

using Microsoft.Data.Schema.Extensibility;

using Microsoft.Data.Schema.SchemaModel;

using Microsoft.Data.Schema.SchemaModel.Abstract;

using Microsoft.Data.Schema.ScriptDom.Sql;

using Microsoft.Data.Schema.Sql.SchemaModel.SqlServer;

using Microsoft.Data.Schema.Sql.SqlDsp;

using Microsoft.Data.Schema.StaticCodeAnalysis;

 

 

2.3定义类

定义了一些类的属性(attributes)。

DatabaseSchemaProviderCompatibility允许用户指定Sql Rule所要应用的SqlDatabase类型,这里使用的是标准SqlDatabase

DataRuleAttirbute用来指定name, id, description等其他规则属性。

SupportedElementTypeAttribute,此属性用来指定要验证的数据库对象,此处要验证的是表字段。

 

2.4构造函数

public MyStylePrefixedTable()

            : base(

         "SqlRule",

         "DD0002",

         "All columns must be in form xxxx_xxxxxxxx",

         "All columns must be in form xxxx_xxxxxxxx where the part befor the _ is table code, and part after is descriptivename",

         "",

         "MyStylePrefixedTable")

        {

        }

定义一些列的命名规则,即4个字母的表名_字段名。

 

2.5新建资源文件

所有传到DataRuleAttribute里面的字符串都需要添加到以上资源文件中。填写资源文件如下图:

 

2.6创建常量类

此处的ResourceBaseName就是资源文件的表名。

2.7重写Analyze方法

public override IList<DataRuleProblem> Analyze(DataRuleSetting ruleSetting, DataRuleExecutionContext context

{

    List<DataRuleProblem> problems = new List<DataRuleProblem>();

 

    IList<string> nameParts = context.ModelElement.Name.Parts;

    IDatabaseColumn column = context.ModelElement as IDatabaseColumn;

    if (column == null)

        return null;

 

    if (nameParts.Count == 3)

    {

        if (!Regex.Match(nameParts[2], @"^w{4}_w*").Success)

        {

            string message = string.Format(

                "Column {0} of table {1}.{2} must have the form pref_columnname.",

                 nameParts[2], nameParts[0], nameParts[1]);

            DataRuleProblem p = new DataRuleProblem(this, message, context.ModelElement);

 

            p.Severity = DataRuleProblemSeverity.Error;

            problems.Add(p);

        }

    }

 

    return problems;

}

 

2.8注册Sql Rule

copy "$(TargetDir)$(TargetName)$(TargetExt)" "$(ProgramFiles)Microsoft Visual Studio 10.0VSTSDBExtensions$(TargetName)$(TargetExt)" /y

 

copy "$(ProjectDir)$(TargetName).Extensions.xml" "$(ProgramFiles)Microsoft Visual Studio 10.0VSTSDBExtensions$(TargetName).Extensions.xml" /y

 

"C:Program FilesMicrosoft SDKsWindowsv7.0ABinNETFX 4.0 Toolsgacutil.exe" /if "$(ProgramFiles)Microsoft Visual Studio 10.0VSTSDBExtensions$(TargetName)$(TargetExt)"

拷贝到Build Events->Pre-build event中,然后编译类库,生成相应的DLL文件,供其项目调用。

 

    至此,在VS2010中定制数据库命名规则的功能完成,再也不用担心开发人员不按照规则开发了,如果出现不按照规则的命名,脚本编译不能通过,并且有提示。

3.      总结

相信VS2010的这些新的特性,以及一些新的开发技巧能够快速提高开发人员的工作效率。对VS2010新版本感兴趣的朋友,可以通过该地址下载:http://www.microsoft.com/visualstudio/zh-cn/products/2010/default.mspx

 

版权

作者:灵动生活 郝宪玮

出处:http://www.cnblogs.com/ywqu

如果你认为此文章有用,请点击底端的【推荐】让其他人也了解此文章,

img_2c313bac282354945ea179a807d7e70d.jpg

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

相关文章
|
5月前
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
|
2月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
3月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
5月前
|
前端开发 开发者
Vaadin Grid的秘密武器:打造超凡脱俗的数据展示体验!
【8月更文挑战第31天】赵萌是一位热爱UI设计的前端开发工程师。在公司内部项目中,她面临大量用户数据展示的挑战,并选择了功能强大的Vaadin Grid来解决。她在技术博客上分享了这一过程,介绍了Vaadin Grid的基本概念及其丰富的内置功能。通过自定义列和模板,赵萌展示了如何实现复杂的数据展示。
53 0
|
5月前
|
SQL 开发框架 .NET
深入解析Entity Framework Core中的自定义SQL查询与Raw SQL技巧:从基础到高级应用的全面指南,附带示例代码与最佳实践建议
【8月更文挑战第31天】本文详细介绍了如何在 Entity Framework Core (EF Core) 中使用自定义 SQL 查询与 Raw SQL。首先,通过创建基于 EF Core 的项目并配置数据库上下文,定义领域模型。然后,使用 `FromSqlRaw` 和 `FromSqlInterpolated` 方法执行自定义 SQL 查询。此外,还展示了如何使用 Raw SQL 进行数据更新和删除操作。最后,通过结合 LINQ 和 Raw SQL 构建动态 SQL 语句,处理复杂查询场景。本文提供了具体代码示例,帮助读者理解和应用这些技术,提升数据访问层的效率和灵活性。
275 0
|
6月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
125 3
|
6月前
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之数据集成时源头提供数据库自定义函数调用返回数据,数据源端是否可以写自定义SQL实现
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
|
7月前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之在sql里调用自定义的udf时,设置一次同时处理的数据行数,是并行执行还是串行执行的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7月前
|
SQL 存储 关系型数据库
PolarDB产品使用合集之有的sql里面有自定义存储函数 如果想走列存有什么优化建议吗
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
344 0