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

  • 相关阅读:
    面向使用的软件设计随笔04
    面向使用的软件设计随笔03
    面向使用的软件设计随笔02
    面向使用的软件设计随笔01
    阅读笔记16
    阅读笔记15
    阅读笔记14
    阅读笔记13
    如何在Mac OS X上安装 Ruby运行环境
    IOS开发隐藏键盘的4种方法
  • 原文地址:https://www.cnblogs.com/zitjubiz/p/EF_Self_Tracking_Entities.html
Copyright © 2020-2023  润新知