ASP .NET MVC 之Entity Framework入门教程及源码_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > ASP .NET MVC 之Entity Framework入门教程及源码

ASP .NET MVC 之Entity Framework入门教程及源码

 2014/12/18 17:24:39  williamzhu  程序员俱乐部  我要评论(0)
  • 摘要:本文主要的目的是1.说明EntityFrameworkPowerTools如何使用。2.EntityFramework快速门实验环境:OS:WindowsServer2012,Windows7DE:VS2013+MVC6.0+EntityFramework+SQLServer2012准备工作基于现有数据库生成POCO数据类和数据库上下文需要借助VisualStudio一个扩展插件--EntityFrameworkPowerTools(一个CodeFirst反向工程工具)
  • 标签:.net MVC Framework 源码 net 教程

本文主要的目的是

1. 说明Entity Framework Power Tools如何使用。

2. Entity Framework  快速门

实验环境:

OS: Windows Server 2012, Windows 7

DE: VS2013 + MVC 6.0+Entity Framework+ SQL Server 2012

准备工作

基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工程工具)。只要在Visual Studio扩展里面输入“Entity Framework Power”搜索即可找到最新的扩展

 

wps4F6A.tmp

 

点击下载即可(如下图)。当然你也可以到这里Entity Framework Power Tools Beta 3下载安装包进行安装。

wps9003.tmp

在这里我们这里新建“School”数据库,打开Microsoft SQL Server 2012的SQL Server Management Studio管理工具,新建”School”数据库。

wpsB668.tmp

执行创建表的脚本,脚本路径如下

http://msdn.microsoft.com/zh-cn/data/jj614587

 

然后我们创建一个控制台应用程序,项目名称为EFPowerToolsSample。

 

wpsB570.tmp

在使用EF power tool 之前,先安装EntityFramewok,否则会出现奇怪的问题。

在项目引用右键弹出菜单选择“管理NuGet程序包”

wps2053.tmp

弹出窗口键入Entity Framwork,并安装。

wps86A5.tmp

 

 

反向工程生成POCO代码

右键单击项目,然后选择“实体框架”–>“对 Code First 进行反向工程”。

输入要根据其对 Code First 进行反向工程的现有数据库的相关信息。

注意:这将对数据库中的所有表进行反向工程,因此如果不希望操作所有表,需要从模型中手动删除不需要的表。

 

wpsE77B.tmp

在弹出的窗口中输入相关的数据库连接信息即可

wps4E49.tmp

点击高级,修改 Persist  Security Info 为 True。否则会出现错误

wps9D34.tmp

我们先看一下配置文件,可以看到在配置文件中Entity Framework Power Tools已经自动对数据库连接串进行了配置,添加了名为“SchoolContext”的数据库连接串:

wpsDDDD.tmp

在项目中我们还可以看到Entity Framework Power Tools自动创建了一个Models文件夹,这里除了“School”类还有所有的数据类。在Models文件夹下还有一个“Mapping”文件夹,这里放了数据类与数据库的映射配置类,可以看出Entity Framework Power Tools通过fluent API的方式进行映射细节配置(目前Entity Framework Power Tools还不支持Data Annotations方式),关于配置类的具体细节我们这里暂不进行详细介绍

操作EF 进行基本的增删改查

学习了如何通过工具生成代码后,我们再学习一下如何使用EF进行最基本的增删改查操作。

一般查询

 

 

 

var Courses = db.Courses.Where(c => c.Title == "Physics").OrderBy(c => c.Title);
 foreach (var c in Courses)
  {
   Console.WriteLine(c.Title);
  }

添加

Models.Course model = new Course();
model.Title = "test";
model.DepartmentID = 1;
model.CourseID = 4;
db.Courses.Add(model);
db.SaveChanges();

修改

Models.Course model = new Course();
var result = (from r in db.Courses 
         where r.Title.StartsWith("test") 
         orderby r.Title descending 
         select r).FirstOrDefault();

model = (Course)result;
model.Credits = 4;
model.Title = "good job";
db.SaveChanges();

删除

var result = from r in db.Courses
      where r.CourseID == 4
      select r;
foreach (var c in result)
    {
     db.Courses.Remove(c);
    }
db.SaveChanges();

 

简单的函数计算(count,min,max,sum)

var result = (from r in db.StudentGrades
        where r.StudentID == 2
        select r).Sum(p=>p.Grade);
Console.WriteLine(result);
var result = (from r in db.StudentGrades
        where r.StudentID == 2
        select r).Max(p => p.Grade);
 Console.WriteLine(result);

 

分页数据查询

var result = (from r in db.People
    orderby r.LastName ascending
    select r).Skip(5).Take(5);
foreach(var c in result)
     {
      Console.WriteLine(c.LastName);
     }

 

分组group by

var ss = from r in db.StudentGrades
    orderby r.StudentID descending
    group r by new { r.StudentID, r.CourseID } into g
    select new
    {
        g.Key,
        grade = g.Sum(r => r.Grade)
    };
foreach (var r in ss)
    {
    string output = "StudentID:" + r.Key.StudentID + " CourseID:" + r.Key.CourseID+" grade"+r.grade;
    Console.WriteLine(output);
    }

 

复杂的关联查询

var d = db.Database.SqlQueryForDynamic(@"SELECT
  c.CourseID,d.[Name] as department,c.Title
FROM
  Course c INNER JOIN Department d ON c.DepartmentID = d.DepartmentID");
   foreach (dynamic item in d)
   {
    var s = item.Title;
Console.WriteLine(s);
    }
Console.ReadLine();

欢迎加入企鹅群238473238交流

http://files.cnblogs.com/williamzhu/EFPowerToolsSample.zip

发表评论
用户名: 匿名