Chapter1-data access reloaded:Entity Framework(下)
1.4 Delving deep into object/relational differences 深入挖掘对象关系的不同
理解面向对象和关系世界的不同是重要的,因为他会影响你设计一个对象模型或者领域模型以及数据库。
这个不匹配被拆分成了几个部分:数据类型的不匹配,关联的不匹配,颗粒尺度的不匹配,继承的不配,识别的不匹配,在下面的几个部分,我们会轮流的探究他们,为了更好的阐述这个不匹配,我们还会使用前面提到的例子。
1.4.1 The datatype mismatch 数据类型的不匹配
数据类型的不匹配是指对象和关系使用的数据表现和约束是不同的,当你往数据库中的表添加一列的时候,你必须要给他制定一个类型,现代数据库支持char,varchar,int,decimal,data等等,当类面对这个的时候,情况变得不同,数据库的Int和bigint类型非常适合.net的Int32,Int54类型,但是其他的数据库类型在.net里面没有一个转却的匹配,你 可以在列上设置一个约束来强制业务规则,当我们的数据库是为好几个应用程序服务,并不是只有你更新数据的时候的时候,这是非常值得期待的事情,在.net里面,varchar是不存在的,最相近的类型是String,但是它不支持声明长度限制(它可以保存2G的数据),如果你想检查String的值不超过期望值,你不得不在set属性中实现这个坚持,或者是在发往数据库之前调用一个检查方法。
另一个关于数据类型不匹配的例子是二进制数据,每个数据库都接受二进制数据,但是含有二进制数据的列不知道这个数据代表的是什么,它可能是text或者PDF文件,图片等等,在.net中,你可以用一个对象来表示这个列,但它将是无意义的,因为如果你知道这列存储的是哪种数据,如果是文件你可以使用流对象,如果是图片Image是最好的选择。
最后一个关于类型的不同是当你使用date的时候,根据数据库供应商和版本,你可以有很多的数据库类型供使用去存储一个日期,举例子,在SQLServer2005之前(包括),你可以使用DateTime和SmallDateTime,SQLServer2008又引入了两个数据类型:Date,Time,如你所想,Date只包含日期,Time只包含时间,在.net中,你只有一个DateTime类去表示Date和Time,处理这个不匹配并不十分困难,但是反过来,but it requires a bit of discipline when instantiating the object
from database data and vice versa.
正如你看到的,数据类型的不匹配是很平常的,并不会引起开发人员晚上失眠 ,但是它确实存在,而且你必须要 考虑的事情。第二个不同是关联的不同,在1.2会碰到,数据库使用外键去表现关联,然而面向对象的应用程序使用引用,在下个部分我们会深入这个话题。
1.4.2 关联不匹配
当我们讨论Association的时候,关系和对象世界的最大不匹配是关系如何维护的,数据库表使用一个不同于类的机制。让我们检查两个世界的基数关系(一对一,多对多)是如何处理的。
一对一关系订单表拥有关于订单的所有数据,但是假设应用需要改进,一个额外的列需要添加到Order订单表,这可能看起来是一个很小的改进,因为添加一列并不是特别的危险,但是严重的不是这个,可能有很多的应用程序依赖于这个表,如果你不想避免引入Bug的话,机制的做法是创建一个新表,新表拥有一个OrderID和一个新列,从数据库方面来说,这是一个可以接受的折中方案但是在对象世界中重复这一的设计是无意义的,最好的方式是在Order类中添加一个属性。
同数据库交互的方法会处理两个模式之间的不同,这个方法一点都不复杂,它在两个表做了一个Join,并更新数据去处理这个不匹配
Select a.*, b.* from Orders a join Order2 on (a.orderid = b.orderid)
This association difference leads to the granularity mismatch, which will be discussed
later in this section.
Chapter1-data access reloaded:Entity Framework(下)的更多相关文章
- Chapter1-data access reloaded:Entity Framework(上)
本章包括以下几个部分: 1.DataSet and classic ADO.NET approach2.Object model approach3.Object/relational mismatc ...
- How to: Supply Initial Data for the Entity Framework Data Model 如何:为EF数据模型提供初始数据
After you have introduced a data model, you may need to have the application populate the database w ...
- SQL Server 2008 Data Types and Entity Framework 4
Because I’ve had a lot of conversations about spatial data types lately, I thought I would create a ...
- What is Entity Framework?
1.什么是EntityFramework? http://www.entityframeworktutorial.net/what-is-entityframework.aspx Writing an ...
- Entity Framework Tutorial Basics(2):What is Entity Framework?
What is Entity Framework? Writing and managing ADO.Net code for data access is a tedious and monoton ...
- Entity Framework context per request
原文发布时间为:2011-09-24 -- 来源于本人的百度文章 [由搬家工具导入] http://www.blog.cyberkinetx.com/2011/05/15/entity-framewo ...
- Access MongoDB Data with Entity Framework 6
This article shows how to access MongoDB data using an Entity Framework code-first approach. Entity ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 读取关系数据
Reading related data¶ 9 of 9 people found this helpful The Contoso University sample web application ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 增、查、改、删操作
Create, Read, Update, and Delete operations¶ 5 of 5 people found this helpful By Tom Dykstra The Con ...
随机推荐
- POJ 1161 Walls(Floyd , 建图)
题意: 给定n个城市, 然后城市之间会有长城相连, 长城之间会围成M个区域, 有L个vip(每个vip会处于一个城市里)要找一个区域聚会, 问一共最少跨越多少个长城. 分析: 其实这题难就难在建图, ...
- Linux常用命令大全--有关磁盘空间的命令
1.mount 命令的功能是挂载文件系统,可以挂载硬盘.光盘.软盘,也可以挂载NFS网络文件系统 mount -t 设备类型 存放目录 mount IP地址:/所提供的目录 存放目录 (无) 不加任何 ...
- 新建oracle连接远程服务
更新下面两个文件夹中的 D:\app\shisan\product\11.2.0\client_1\network\admin D:\ORACLE\product\11.2.0\dbhome_1\NE ...
- Using TCP keepalive under Linux
Linux has built-in support for keepalive. You need to enable TCP/IP networking in order to use it. Y ...
- MTK GPIO 新增变量配置
主要涉及的文件: 1.需要配置preloader ,lk ,kernel vendor GPIO_YuSu.cmp文件增加IO别名: 2.需要配置preloader ,lk ,kernel vendo ...
- 积累js里有用的函数库
一.兼容地获取非行间样式(兼容火狐,ie,chrome) function getStyle(obj,name) { if(obj.currentStyle){ return obj.currentS ...
- 通过简单的两数相加体会hashmap的好处
目录 引入题目:两数相加 HashMap相关知识: Map集合 Map集合的特点 Map常用子类 HashMap集合 LinkedHashMap集合 Map集合的常用方法 Map集合的第一种遍历方式: ...
- Spring Data Redis与Jedis的选择(转)
说明:内容可能有点旧,需要在业务上做权衡. Redis的客户端有两种实现方式,一是可以直接调用Jedis来实现,二是可以使用Spring Data Redis,通过Spring的封装来调用.应该使用哪 ...
- 阿里oss上传图片react组件alioss-react,vue组件alioss-vue (不用我先收藏着,后端看下前端处理方法)
1.介绍 最近开发了一个项目,其中需要一个上传图片到阿里云的 oss 上面,就是上传图片到阿里云的 oss 上面. 因为之前开发过 vue 的阿里云 oss 上传,所以直接复制粘 vue 的组件. 因 ...
- Myeclipse配置jad
下载地址:http://pan.baidu.com/s/1bnpMEuF 1.下载jad158g.win.zip 下载后解压.解压缩后将jad.exe拷贝到自定义的文件夹内:我这里用的是D:/jad/ ...