是用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)

  1. MSSqlDAL.Save(e);
  2. 或者你在Entity中增加一个方法public void Save(){ MSSqlDAL.Save(this);},然后调用e.Save()。

两种方法视乎都可以达到效果,但是现在如果我们的系统需要在另外一个数据库存一个副本,即同一个对象会存到两个不同的数据库(可能是SqlServer,也可能是Oracle),这个时候,我们需要增加一个Oracle数据库的数据层OracleDAL.所以如果这个时候来调用e.Save()方法就出现问题了。

最后总结一下,最终定下来采用Dal.Save(e)保存对象是正确的,因为强制性给实体对象增加一个Save()方法,似乎有点说不通,因为对象本身并没有保存这个动作。而是由数据层来负责保存数据库实体对象,这也符合OO原则。

ASP.NET开发技术交流群: 67511751

posted on 2011-12-27 15:40 Juvy 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Juvy/archive/2011/12/27/2303638.html

是用Entity.Save(),还是用DAL.Save(Entity e)相关推荐

  1. Sequence of component save EC and orderadm_h save

    Sequence of component save EC and orderadm_h save - 时序问题研究 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  2. 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 ...

  3. 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 软 ...

  4. 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 ...

  5. save()php,PHP DOMDocument save()用法及代码示例

    DOMDocument::save()函数是PHP中的一个内置函数,用于从DOM表示形式创建XML文档.从头开始创建新的dom文档后使用此功能. 用法: int DOMDocument::save( ...

  6. matlab保存数据save,[转载]matlab中save,load使用方法

    功能描述]存储文件 [软件界面]MATLAB->File->Save Workspace As将变量存入硬盘中指定路径. [函数用法] save:该函数将所有workspace中变量用二进 ...

  7. php mongo save,MongoDB:使用save()更新集合中的现有文档

    这些例子没有做同样的事情-- 在JS示例中,您声明了对象mongo > var mongo = db.things.findOne({name:"mongo"}); 然后,您 ...

  8. Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA

    新手小白首次碰到这个问题,并解决,记录下. 找到C:\Users\Administrator\.IntelliJIdea2017.2\system\log下的 idea.log 文件查看错误日志 解决 ...

  9. 413 request entity too large php,413 Request Entity Too Large

    昨天用wordpress发布文章,文章内容是一个网站一段时间来的运行信息,20几页的列表结果粘到编辑器. 点击发布后,页面卡住了,过了一会返回浏览器显示"413 Request Entity ...

最新文章

  1. 使用WinDbg获取SSDT 系统服务描述表的函数服务号(索引)
  2. Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533)
  3. python练习笔记——分解质因数
  4. php面向对象之策略模式,php策略模式的学习--引自《深入php面向对象模式与实践》...
  5. 2019重庆对口高职计算机类分数排名,重庆2019高职分类考试分数线公布
  6. 一个简化的插件框架c#
  7. 汇编学习--7.16--中断
  8. iphone开机白苹果_iphone白苹果原因是什么 iphone白苹果解决方法【介绍】
  9. Callnbsp;tonbsp;undefinednbsp;functionnbsp;mssql_connect()错误解决
  10. 传智播客java费用_传智播客java费用
  11. 冒泡排序bubbleSort
  12. 官网链接下载QT5 Creator
  13. 常用定时任务(cron)表达式
  14. 模式识别与机器学习(国科大2021-2022秋季学期课程)-基础概念及算法
  15. 网络编程 upd 发送接收数据
  16. Java服务器开发之搭建游戏基础框架
  17. 计算机上睡眠和休眠区别,计算机睡眠和休眠的区别
  18. 维修 空调 碰上 骗子
  19. Mock测试-优缺点分析
  20. STM32+光敏模块

热门文章

  1. 提前还清贷款为什么还要付违约金?
  2. pagerank数据集_从数据结构到算法:图网络方法初探
  3. sql 数据库前两列值乘_Sql语句常用关键字
  4. pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)
  5. mysql left join 查询_MySQL联表查询基本操作之left-join常见的坑
  6. OpenCV使用Tensorflow2-Keras模型
  7. 【TensorFlow-windows】name_scope与variable_scope
  8. 基于RBF简单的matlab手写识别
  9. 美国正面临“人才泡沫”破裂危机?
  10. MSN8.0经常出现连接错误,如何解决?