是用Entity.Save(),还是用DAL.Save(Entity e)
自从上一次写关于ORM的文章已经是几个月前的事情了,在这里先贴一下文章的地址,如果大家感兴趣的话可以去看看。
1、支持差异数据保存的数据库实体类设计——处女作
2、支持差异数据保存的数据库实体类设计(二)(续)
3、支持差异数据保存的数据库实体类设计(三)(续)
4、SAS框架问世(本片博客即将登场)
由于一直忙于框架的优化,所以就很少写文章了,本文也是在不断的优化自己的ORM过程中诞生的,好了废话不多说了,下面步入正题。
一直在使用公司内部使用的一个框架,框架的的数据层可以说是两个类,一个Entity类,一个EntityFactory类,这两个类分别是干吗就不多讲了。在不断编码的过程中总是发现在重复的写EntityFactory.Save(e)、EntityFactory.Delete(e)这样的代码,心里就在想可否做一下处理,直接调用Entity.Save(),或者Entity.Delete()这样写起来方便,看起来也很顺眼。
直到最近在优化自己的框架代码的时候,才发现Entity.Save()是不太合适的,特别是当你的应用程序需要连接到多个不同的数据库的时候,而且你也不知道当前这个Entity对应于哪个数据库,或者说同一个Entity对应于多个数据库的时候,使用Entity.Save()操作估计就很难办了。
假设:MSSqlDAL是Sql Server数据库的数据层,在保存实体对象的时候,你可以通过下面方法完成(Entity e)
- MSSqlDAL.Save(e);
- 或者你在Entity中增加一个方法public void Save(){ MSSqlDAL.Save(this);},然后调用e.Save()。
两种方法视乎都可以达到效果,但是现在如果我们的系统需要在另外一个数据库存一个副本,即同一个对象会存到两个不同的数据库(可能是SqlServer,也可能是Oracle),这个时候,我们需要增加一个Oracle数据库的数据层OracleDAL.所以如果这个时候来调用e.Save()方法就出现问题了。
最后总结一下,最终定下来采用Dal.Save(e)保存对象是正确的,因为强制性给实体对象增加一个Save()方法,似乎有点说不通,因为对象本身并没有保存这个动作。而是由数据层来负责保存数据库实体对象,这也符合OO原则。
ASP.NET开发技术交流群: 67511751
转载于:https://www.cnblogs.com/Juvy/archive/2011/12/27/2303638.html
是用Entity.Save(),还是用DAL.Save(Entity e)相关推荐
- Sequence of component save EC and orderadm_h save
Sequence of component save EC and orderadm_h save - 时序问题研究 要获取更多Jerry的原创文章,请关注公众号"汪子熙":
- pycharm异常问题之Unable to save settings: Failed to save settings. Please restart PyCharm
pycharm异常问题之Unable to save settings: Failed to save settings. Please restart PyCharm 参考文章: (1)pychar ...
- Entity Framework Core 3.1 和 Entity Framework 6.4 发布
目前,Entity Framework Core 3.1 和 Entity Framework 6.4 已正式发布. EF Core 3.1的获取方式 EF Core 3.1 作为一组 NuGet 软 ...
- Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布
Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容: Entity Framework Core 3.0 EF C ...
- save()php,PHP DOMDocument save()用法及代码示例
DOMDocument::save()函数是PHP中的一个内置函数,用于从DOM表示形式创建XML文档.从头开始创建新的dom文档后使用此功能. 用法: int DOMDocument::save( ...
- matlab保存数据save,[转载]matlab中save,load使用方法
功能描述]存储文件 [软件界面]MATLAB->File->Save Workspace As将变量存入硬盘中指定路径. [函数用法] save:该函数将所有workspace中变量用二进 ...
- php mongo save,MongoDB:使用save()更新集合中的现有文档
这些例子没有做同样的事情-- 在JS示例中,您声明了对象mongo > var mongo = db.things.findOne({name:"mongo"}); 然后,您 ...
- Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
新手小白首次碰到这个问题,并解决,记录下. 找到C:\Users\Administrator\.IntelliJIdea2017.2\system\log下的 idea.log 文件查看错误日志 解决 ...
- 413 request entity too large php,413 Request Entity Too Large
昨天用wordpress发布文章,文章内容是一个网站一段时间来的运行信息,20几页的列表结果粘到编辑器. 点击发布后,页面卡住了,过了一会返回浏览器显示"413 Request Entity ...
最新文章
- 使用WinDbg获取SSDT 系统服务描述表的函数服务号(索引)
- Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533)
- python练习笔记——分解质因数
- php面向对象之策略模式,php策略模式的学习--引自《深入php面向对象模式与实践》...
- 2019重庆对口高职计算机类分数排名,重庆2019高职分类考试分数线公布
- 一个简化的插件框架c#
- 汇编学习--7.16--中断
- iphone开机白苹果_iphone白苹果原因是什么 iphone白苹果解决方法【介绍】
- Callnbsp;tonbsp;undefinednbsp;functionnbsp;mssql_connect()错误解决
- 传智播客java费用_传智播客java费用
- 冒泡排序bubbleSort
- 官网链接下载QT5 Creator
- 常用定时任务(cron)表达式
- 模式识别与机器学习(国科大2021-2022秋季学期课程)-基础概念及算法
- 网络编程 upd 发送接收数据
- Java服务器开发之搭建游戏基础框架
- 计算机上睡眠和休眠区别,计算机睡眠和休眠的区别
- 维修 空调 碰上 骗子
- Mock测试-优缺点分析
- STM32+光敏模块
热门文章
- 提前还清贷款为什么还要付违约金?
- pagerank数据集_从数据结构到算法:图网络方法初探
- sql 数据库前两列值乘_Sql语句常用关键字
- pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)
- mysql left join 查询_MySQL联表查询基本操作之left-join常见的坑
- OpenCV使用Tensorflow2-Keras模型
- 【TensorFlow-windows】name_scope与variable_scope
- 基于RBF简单的matlab手写识别
- 美国正面临“人才泡沫”破裂危机?
- MSN8.0经常出现连接错误,如何解决?