LINQ to SQL(4):OR设计器

在我们使用LINQ to SQL的时候,需要大量的使用OR设计器,虽然我们手工写代码也是完全可以实现的,但是OR设计器是非常强大的工具,我想有了它,没有几个人会去手工写代码,当然了,手动写代码也是必须的,这一篇我就写几个典型的需要手工写代码的情况

打开和关闭复数形式

默认情况下,OR设计器会将数据库对象从服务器资源管理器拖放到OR设计器上的时候,会自动将ies,s结尾修改为单数形式,这样可以更准确的表示实例化的实体类到单个数据记录的事实,但是某些时候,我们可能会不需要这种效果,这样倒是可能会把我们的代码弄混乱,如果需要关闭这种效果,这样做

在VS菜单栏点击“工具”--“选项”,打开数据库工具NODE,点击O/R Designer,然后把“启动”的值更改为False

扩展OR设计器生成的代码

的确,OR设计器为我们做了很多的东西,但是某些时候,我们还是不得不动动键盘,智能方便总有它的缺陷,比如下面这种情况:

比如我们查询数据库的Account表,而我们不需要它的密码列,和最后登陆时间列(假设表中是有这些列的),而在我们直接将一个表拖放到OR设计器中的时候,他模型是添加了这些列的,所以我们可能会使用如下的代码

var queryWithAlias = from u in db.User
                                 select new NewUser{ 用户名 = u.UserName, 姓名 = u.Name, 年龄 = u.Age };

这样,我们就没有一个实体类与之对应了,这种情况下,就需要在原有的xxx.designer.cs类里添加一个实体类与他进行对应(像第一节写的那样),他包含“用户名”,“姓名”,“年龄”等属性,当然了,我们完全也可以在外部声明一个这样的类型,但是这样不光破坏了对象的封装,而且在使用上也增加了复杂度

向实体类中添加验证

验证实体类是指确认输入到数据对象中的值是否符合对象架构内的约束,以及是否符合为应用程序所建立的规则的过程。在将更新发送到基础数据库之前对数据进行验证是一种很好的做法,这样可以减少错误。还可以减少应用程序和数据库之间的潜在往返行程次数

在对实体类中添加验证的时候,有两个不同的阶段,分别是在列值更改过程中验证数据和在事体类更新过程中验证数据,由于 C# 项目不会自动生成事件处理程序,因此您可以使用 IntelliSense 创建列更改分部方法

列更改过程中添加验证:

partial void On列名Changing(COLUMNDATATYPE value)
    {
       throw new System.NotImplementedException();
    }

我们在使用时候,把“列名”更改为需要验证的列名

实体类更新过程中验证:

partial void Update类名(类名 instance)
{
    if (instance.列名 == x)
    {
        string ErrorMessage = "Invalid data!";
        throw new System.Exception(ErrorMessage);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python和你

Python数据分析之贴吧的问与答读取数据库获取question列分词词云

953
来自专栏青玉伏案

iOS开发之Alamofire源码解析

今天博客中的Alamofire源码的版本是以3.4版本为例。上篇博客系统的对NSURLSession相关的东西进行了详细的解析,详情请看《详解NSURLSess...

2147
来自专栏野路子程序员

爱奇艺弹幕解码 JS+ArrayBuffer+ungzip+utf8ArrayToStr

3666
来自专栏听雨堂

LegacyText的复制的Bug

        如果要动态复制一个LegacyText的文字,保持原来的中心位置,角度等,但修改其大小,发现有个别文字会偏离真正的中心位置,结果一番跟踪,发现问...

1727
来自专栏技术博客

Json和Jsonp

  JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官...

642
来自专栏更流畅、简洁的软件开发方式

好大一棵树,新春的祝福(二):功能节点的数据结构和页面展示

1、数据结构      在原有的基础上,把noteID改成FunctionID,去掉code字段,增加三个字段。 NoteLevel :表示第几级的节点,可...

1965
来自专栏抠抠空间

AJAX使用说明书

AJAX简介 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使...

2727
来自专栏互联网杂技

如何写出好的 JavaScript —— 浅谈 API 设计

很多同学觉得写 JavaScript 很简单,只要能写出功能来,效果能实现就好。还有一些培训机构,专门教人写各种“炫酷特效”,以此让许多人觉得这些培训很“牛逼”...

2536
来自专栏郭霖

Android Volley完全解析(三),定制自己的Request

经过前面两篇文章的学习,我们已经掌握了Volley各种Request的使用方法,包括StringRequest、JsonRequest、ImageRequest...

1866
来自专栏技术博文

浅谈开启magic_quotes_gpc后的sql注入攻与防

通过启用php.ini配置文件中的相关选项,就可以将大部分想利用SQL注入漏洞的骇客拒绝于门外。        开启magic_quotes_gpc=on之后,...

3435

扫描关注云+社区