VS2010中创建自定义SQL Rule

简介:

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模型对比(Sche ma  Compare

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

 

1.2数据对比(Data Compare

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

 

1.3数据生成计划(Data Generation Plans

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

using Microsoft.Data.Sche ma .Sche ma Model;

using Microsoft.Data.Sche ma .Sche ma Model.Abstract;

using Microsoft.Data.Sche ma .ScriptDom.Sql;

using Microsoft.Data.Sche ma .Sql.Sche ma Model.SqlServer;

using Microsoft.Data.Sche ma .Sql.SqlDsp;

using Microsoft.Data.Sche ma .StaticCodeAnalysis;

 

 

2.3定义类

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

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

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

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

 

2.4构造函数

public MyStylePrefixedTable()

            base(

         "SqlRule",

         "DD0002",

         "A ll  columns must be in form xxxx_xxxxxxxx",

         "A ll  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 == nu ll )

        return nu ll ;

 

    if (nameParts.Count == 3)

    {

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

        {

            string message = string.For ma t(

                "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中,然后编译类库,生成相应的D LL 文件,供其项目调用。

 

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

3.      总结

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



本文转自灵动生活博客园博客,原文链接:http://www.cnblogs.com/ywqu/archive/2010/04/19/1715185.html ,如需转载请自行联系原作者


相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
294 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
452 44
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
684 222
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
133 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1677 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
926 61