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

所以打算从网站做起,在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

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

  1. 初学C#和MVC的一些心得,弯路,总结,还有教训(4)--Cache 关于创建多个缓存实例

    asp.net中的数据缓存可以用 HttpRuntime.Cache ,这个是大家都知道的,但如果缓存的数据比较多,又比较杂乱,想要把缓存分开管理(也就是创建多个缓存实例)应该怎么做呢... 于是常规 ...

  2. 初学C#和MVC的一些心得,弯路,总结,还有教训(3)--Dapper

    经过一番深思熟虑,决定先用Dapper吧..... 以下是我感觉比较有用的一些东西 Dapper项目地址  https://github.com/StackExchange/dapper-dot-ne ...

  3. 初学C#和MVC的一些心得,弯路,总结,还有教训(1)--语言的选择

    因为惰性,自制力,求知欲等各方面原因....一直没有学新技术,总感觉VB6凑合能用就凑合用.... 于是大概从05年开始,几乎每次新版的vs一发布,我就下载回来,然后安装,然后,,,,就扔那了.... ...

  4. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

  5. MVC用非Entity Framework将数据显示于视图

    学习此篇之前,先看看<DataTable数据显示于MVC应用程序>http://www.cnblogs.com/insus/p/3361182.html 那是将DataTable显示于MV ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  7. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之目录导航

    ASP.NET MVC with Entity Framework and CSS是2016年出版的一本比较新的.关于ASP.NET MVC.EF以及CSS技术的图书,我将尝试着翻译本书以供日后查阅. ...

随机推荐

  1. Https网站搭建——通过https://localhost:8443访问tomcat首页

    图片大致介绍了Https浏览器与服务器握手的过程,涉及到的名词:证书.Hash算法.随机数密码.公钥加密.私钥解密.握手消息.hash验证.摘要 tomcat服务器配置可以实现https双向认证,简单 ...

  2. js实现右下角可关闭最小化div

    本实例使用Javascript实现右下角可关闭最小化div,可以用于展示推荐内容,效果预览网址:http://keleyi.com/keleyi/phtml/xuanfudiv/3.htm效果图片: ...

  3. 纯CSS3实现3D跳动小球

    请使用Chrome,火狐的浏览器查看本页面,使用IE将看不到效果.如果在本页看不到一个跳动的小球,请确定您的浏览器支持CSS3,或者访问http://keleyi.com/a/bjac/iphgrtq ...

  4. div盒子垂直水平居中

    div盒子,水平垂直居中. <!DOCTYPE html><html> <head> <meta charset="utf-8"> ...

  5. 轻松掌握:JavaScript模板方法模式

    模板方法模式 假如我们有一些对象,各个对象之间有一些相同的行为,也有一些不同的行为,这时,我们就可以用模板方法模式来把相同的部分上移到它们的共同原型中(父类),而将不同的部分留给自己各自重新实现. 模 ...

  6. 深入理解RunLoop

    网上看的一篇文章,写的真好,我得多看几次好好理解理解 膜拜大神,转载至此便于学习查看. 此处标明原文链接:http://blog.ibireme.com/2015/05/18/runloop/    ...

  7. 【代码笔记】iOS-图片手势,上传照片

    代码: RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewControl ...

  8. Ruby的模型关系随笔

    1 Class和Module的实例方法也就是所有具体类和具体Module的类方法,因为具体类和具体Module分别是Class和Module的实例.例如Object.new对应着Class#new,K ...

  9. ORACLE定期清理INACTIVE会话

      ORACLE数据库会话有ACTIVE.INACTIVE.KILLED. CACHED.SNIPED五种状态.INACTIVE状态的会话表示此会话处于非活动.空闲.等待状态.例如PL/SQL Dev ...

  10. Nagios学习实践系列——产品介绍篇

    Nagios介绍 Nagios是一款功能强大.优秀的开源监控系统,它能够让你发现和解决IT架构中存在的问题,避免这些问题影响到关键业务流程. Nagios最早于1999年发布,它在开源社区的影响力是相 ...