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 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

在 Java 中运用动态挂载实现 Bug 的热修复

大多数 JVM 具备 Java 的 HotSwap 特性,大部分开发者认为它仅仅是一个调试工具。利用这一特性,有可能在不重启 Java 进程条件下,改变 Jav...

1052
来自专栏java工会

Linux Shell从入门到删除根目录跑路指南

1595
来自专栏开源优测

python unittest使用基本过程

前言 unittest是python的标准的单元测试框架,能够很好的和自动化测试相结合,并有独立的测试报告框架。 unittest提供了一系列类让测试变得更加容...

40411
来自专栏PHP实战技术

Linux下自动化监控内存、存储空间!

距离上一次更新文章已经过去一段时间了,小编在这段时间因为一些琐事,加上身体生病不能及时更新文章,今天身体逐渐恢复就急忙来更新文章,今天思梦给大家...

3136
来自专栏java学习

Hibernate学习笔记1

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hi...

1126
来自专栏崔庆才的专栏

用Flask+Aiohttp+Redis维护动态代理池

2385
来自专栏美团技术团队

Android远程调试的探索与实现

作为移动开发者,最头疼的莫过于遇到产品上线以后出现了bug,但是本地开发环境又无法复现的情况。常见的调查线上棘手问题方式大概如下: ? 以上两种方法在之前调查线...

4033
来自专栏数据之美

Shell 黑科技之匿名函数实现任务并行化

shell 作为一门系统级别胶水语言,学习成本低,用起来很方便,但是缺点也显而易见:性能问题一直为人锁诟病。所以 shell 也就多用在简单的系统管理等场合,数...

19810
来自专栏java工会

Linux Shell从入门到删除根目录跑路指南

shell 作为一门 linux 下使用广泛的系统语言,语法简单,上手容易,但是想要用好,少犯错误,也不是那么容易的一件事,可谓虽是居家旅行之良药,但也是杀人灭...

653
来自专栏机器之心

代码优化指南:人生苦短,我用Python

选自pythonfiles 机器之心编译 参与:Panda 前段时间,Python Files 博客发布了几篇主题为「Hunting Performance i...

31013

扫码关注云+社区