那个时候用的是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.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了!!!!