初学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

时间: 2024-10-12 23:40:40

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

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

经过一番深思熟虑,决定先用Dapper吧..... 以下是我感觉比较有用的一些东西 Dapper项目地址  https://github.com/StackExchange/dapper-dot-net 初次接触Dapper,简单的范例  https://github.com/xliang/dapper-net-sample 园子里树上的蜗牛 大大写的扩展系列 http://www.cnblogs.com/cyb331/p/3514555.html   文中的下载连接都失效了,这是扩展1.1的下

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

---恢复内容开始--- 因为惰性,自制力,求知欲等各方面原因....一直没有学新技术,总感觉VB6凑合能用就凑合用.... 于是大概从05年开始,几乎每次新版的vs一发布,我就下载回来,然后安装,然后,,,,就扔那了..... 直到装了Win8系统,VB6的IDE(SP6)怎么也装不上了,,,,,终于咬牙决定进军.net.. 因为有深厚的VB基础嘛,至少语法上会有相当的相似,所以想都没想就奔着VB.net去了... 可是学了一段时间后发现几个问题 1.感觉关键字冗余,代码不够优美 2.示例代码

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

asp.net中的数据缓存可以用 HttpRuntime.Cache ,这个是大家都知道的,但如果缓存的数据比较多,又比较杂乱,想要把缓存分开管理(也就是创建多个缓存实例)应该怎么做呢... 于是常规做法来了 using System.Web.Caching; public static class MyCache { public static Cache cache = new Cache(); } 不用说也知道,肯定跑不起来,不然也不会有这篇文章了,使用的时候对新建的 MyCache.ca

使用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 application demonstrates how to create ASP.NET Core 1.0 MVC web applications using Entity Framework Core 1.0 and Visual Studio 2015. Contoso University网络应用的案

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

学习此篇之前,先看看<DataTable数据显示于MVC应用程序>http://www.cnblogs.com/insus/p/3361182.html 那是将DataTable显示于MVC的视图上.Insus.NET现在使用非Entity Framework将数据显示于View视图上.就在其基础上修改吧. 首先删除Models目录的下类,重新创建一个: 稍注意一下namespace和只写两个属性.然后再在Models目录创建一个Entity: 其中#15和#19行代码是从上一篇旧的Model

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

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC MiniProfiler是Stack Overf

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

在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity Framework的背景信息,然后再详细学习如何搭建开发环境. 1.1 MVC和ASP.NET MVC 这本书涵盖Microsoft版本的MVC,即ASP.NET MVC.在写本书的时候,ASP.NET MVC的生产版本为MVC5,因此,本书的示例代码都使用ASP.NET MVC 5编写.在本书中

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添加一个User类: namespace MyFirstApp.Models { public class User { public int ID { get; set; } public string Name { get; set; } public string Email { get; se

ASP.NET MVC 5 + EF 6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 源码下载:点我下载 MVC中的Model是用来给View提供显示数据的对象. 这里我们首先创建一个Model对象. 在解决方案资源管理器中右键点击Models文件夹,选择添加->类.添加一个名为Employee.cs的Model类.Models文件夹