随笔 - 435  文章 - 0  评论 - 111  阅读 - 62万 
EntityFramework 4.0 之前是不敢用,因为不稳定.

那个时候用的是Nhibernate 2.x, 那时候觉得NH对LinQ的支持太弱了.

还有定义视图太麻烦,要跟定义实体一样的流程. 因为UI通常是显示视图,不是单纯的实体.

但NH上手很容易,HQL类似SQL的语法,自动Tracking 实体的状态.

 

前段时间用EF4.1改写Petshop来练练手. EF有三种模式: DB First, Model First,Code First.

其实DB First, Model First 本质是一样的,因为EF自带了Model和DB同步的工具,这一点很爽.

而Code First给我的感觉是给偏执狂用的. 开发效率多慢啊,我还不如用NH呢...

 

ObjectContext的ObjectStateManager 只适用于不分层的开发. 而在多层开发的时候就变成"脑残"了

比如我要update 一个客户下属的order和orderdetail,(包括增加/修改/删除) ,在UI层我还得自己维护各

记录的状态Add/Modify/Delete, 然后在DAL层逐条ObjectStateManager.ChangeObjectState.

太恶心了, 这个时候应该要用Self-Tracking Entites ,请参考下文

 

如果要用WCF或者ViewState来存储Entity,则要对Self-Tracking Entiy Generator做修改, 可参考这个(过时了,要自己做些修改)

如果你用Session存储Entity,则要手工StartTracking,StopTracking, 或者MarkAsModified().

        Template.EffectiveStartAt = DateTime.Now;
        Template.MarkAsModified();
        Template.Levels[
0].FixedNum = 2;
        Template.Levels[
0].MarkAsModified();

 

 

修改过的Self-Tracking Entiy Generator下载: 

/Files/zitjubiz/Self-Track.tt.txt 

 

今天发现STE (Self-Tracking Entiy) 不能删除Collection里面的项,

比如order.orderdetails.remove[entity],并不会删除DB.上网找了好久,没发现解决方法.彻底无语.

 算了.我还是放弃EF了,改回用NHibernate了!!!!

 

posted on   Gu  阅读(704)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
历史上的今天:
2004-08-22 虚拟主机的安全
点击右上角即可分享
微信分享提示