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”搜索即可找到最新的扩展
点击下载即可(如下图)。当然你也可以到这里Entity Framework Power Tools Beta 3下载安装包进行安装。
在这里我们这里新建“School”数据库,打开Microsoft SQL Server 2012的SQL Server Management Studio管理工具,新建”School”数据库。
执行创建表的脚本,脚本路径如下
http://msdn.microsoft.com/zh-cn/data/jj614587
然后我们创建一个控制台应用程序,项目名称为EFPowerToolsSample。
在使用EF power tool 之前,先安装EntityFramewok,否则会出现奇怪的问题。
在项目引用右键弹出菜单选择“管理NuGet程序包”
在弹出窗口键入Entity Framwork,并安装。
右键单击项目,然后选择“实体框架”–>“对 Code First 进行反向工程”。
输入要根据其对 Code First 进行反向工程的现有数据库的相关信息。
注意:这将对数据库中的所有表进行反向工程,因此如果不希望操作所有表,需要从模型中手动删除不需要的表。
在弹出的窗口中输入相关的数据库连接信息即可
点击高级,修改 Persist Security Info 为 True。否则会出现错误
我们先看一下配置文件,可以看到在配置文件中Entity Framework Power Tools已经自动对数据库连接串进行了配置,添加了名为“SchoolContext”的数据库连接串:
在项目中我们还可以看到Entity Framework Power Tools自动创建了一个Models文件夹,这里除了“School”类还有所有的数据类。在Models文件夹下还有一个“Mapping”文件夹,这里放了数据类与数据库的映射配置类,可以看出Entity Framework Power Tools通过fluent API的方式进行映射细节配置(目前Entity Framework Power Tools还不支持Data Annotations方式),关于配置类的具体细节我们这里暂不进行详细介绍。
学习了如何通过工具生成代码后,我们再学习一下如何使用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();
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); }
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交流