• 初学C#和MVC的一些心得,弯路,总结,还有教训(2)--关于Entity Framework


    看了一堆视频教程后,感觉基本了解的差不多了,可以动手.....因为最好的学习方法就是实践嘛....

    所以打算从网站做起,在WebForm和MVC之间选了MVC,因为感觉高大上...也比较灵活

    于是买了两本书《ASP.NET MVC 4高级编程(第4版)》和《ASP.NET MVC 4 Web编程》,在群里有群友问,为什么要买两本...其实这是习惯啦...对于初学者来说,最先要了解的就是,这个东西大概是个什么东西....书的作者不同,介绍的侧重点也不同,买两本就为了互补一下...

    mvc也大概看了一下,至少基本的控制器,试图啊,还有整个的流程都了解的差不多,准备动手了....

    先说说在选择数据库访问技术上遇到的问题.....

    看的教程,基本上数据库都是用EF来做的...于是也跟着用了微软官方出品高大上的Entity Framework....

    Codefirst神马的太遥远,于是先打开sqlserver建库,然后写model...然后兴高采烈的就开始了...

    然后不出意外的就遇到问题了

    1.在深入理解完全面向对象的数据库设计方法之前,思路还是局限在sql时代(毕竟写了很多年的sql语句),这就直接导致了数据库表和Model设计的不合理

    于是就有了下面的Model (省略了部分无关字段)

    菜单ID,父菜单ID,菜单名字,父菜单名字......

    使用的时候根据ParentCode获取到父菜单的MenuName 填充到 ParentName 

        public class Menu
        {
            [Key]
            public int MenuCode{ get; set; }
            public int ParentCode { get; set; }
            public string MenuName { get; set; }
            [NotMapped]
            public string ParentName { get; set; }

    于是就有了这段 自连接(自己Join自己) 查询代码....

                var query = from a in DB.Menus
                            join b in DB.Menus
                            on a.ParentCode equals b.MenuCode into lg
                            from b in lg.DefaultIfEmpty()
                            select new SDOU.Models.Staff.Menu
                            {  
                                MenuCode =a.MenuCode ,
                                MenuName =a.MenuName, 
                                ParentCode =a.ParentCode ,
                                ParentName = b == null ? "" : b.MenuName };

    啪嚓一运行,问题又来了....

    我的Model明明是放在 Models.Staff.Menu ,运行的时候 EF非要给我整到DAL的命名空间下,然后告诉我无法关联实体还是什么的....总之就是自动给我把命名空间给换了.....

    对于新手的我,在百度谷歌捣鼓半天也没解决问题...

    后台求助大神,大神曰,你这一看就知道有问题,不是EF的问题,而是你自己的思路问题....这是在拿着EF写SQL.......(其实我想说,那当然了,我只会sql嘛).....然后大神又说,初学者如果没有面向对象的设计思想,就老老实实回去用sql吧....

    既然大神的指点了,我也不去纠结到底是哪里的问题了,就算把这个命名空间问题搞定,以后用EF肯定还会遇到更多问题....这种自己连接自己的简单查询都搞不定,以后那些横跨多个表的复杂查询就更不用说了....

    于是乎各方求助,百度谷歌一番知道了几个轻量级的微型ORM框架... PetaPoco,Dapper,FluentData,DataRabbit这几个推荐的比较多,有时候没有选择还好,拿来就用了,但有选择的时候反而会更加难下决定....

    于是乎,就有了这个博问   http://q.cnblogs.com/q/65659/  让大神们帮我做个选择....

    最后的结果就是弃用EF,启用Dapper

  • 相关阅读:
    Android录制视频添加水印的高效方案之YUV帧数据覆盖
    Android 数据库迁移--自定义数据类型
    Android Camera录制视频添加水印
    Android视频录制 花屏、绿屏的分析及解决方案
    Android Moudle封装SDK的步骤及注意事项总结
    Android音频流+视频流合成视频及提取音频流、视频流数据
    常见排序算法以及时间复杂度
    整合两个有序集合 时间复杂度最小为O(n)
    Android启动app步骤简介
    HihoCoder String Matching Content Length
  • 原文地址:https://www.cnblogs.com/ssboy/p/3960868.html
Copyright © 2020-2023  润新知