学EntityFramework 所走的弯路,最后放弃

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了!!!!

原文地址:https://www.cnblogs.com/zitjubiz/p/EF_Self_Tracking_Entities.html