前言

在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发。今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等。

Entity Framework Power Tools

基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工程工具)。

通过点击上图的扩展和更新,得到如下图所示的界面

安装完之后只要在项目上右键选择Entity Framework->Reverse Engineer Code First(项目中首先需要安装Entity Framework 包,否则会有错误),然后在弹出的窗口中输入相关的数据库连接信息即可(我们这里使用“NorthWind”数据库)。

当然当你在操作的时候你首先还是要先引用Entity Framework。然后点击Reverse Engineer Code First

配置好数据库链接,

确认之后,我们首先来看一下配置文件的变化

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <configSections>
  4. <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  5. <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  6. </configSections>
  7. <connectionStrings>
  8. <add name="NorthwindContext" connectionString="Data Source=.;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=True"
  9. providerName="System.Data.SqlClient" />
  10. </connectionStrings>
  11. <startup>
  12. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  13. </startup>
  14. <entityFramework>
  15. <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  16. <parameters>
  17. <parameter value="v11.0" />
  18. </parameters>
  19. </defaultConnectionFactory>
  20. </entityFramework>
  21. </configuration>

于此同时生成了NorthWindContext数据库操作上下文

  1. using System.Data.Entity;
  2. using System.Data.Entity.Infrastructure;
  3. using CodeFirstPowerTools.Models.Mapping;
  4.  
  5. namespace CodeFirstPowerTools.Models
  6. {
  7. public partial class NorthwindContext : DbContext
  8. {
  9. static NorthwindContext()
  10. {
  11. Database.SetInitializer<NorthwindContext>(null);
  12. }
  13.  
  14. public NorthwindContext()
  15. : base("Name=NorthwindContext")
  16. {
  17. }
  18.  
  19. public DbSet<Category> Categories { get; set; }
  20. public DbSet<CustomerDemographic> CustomerDemographics { get; set; }
  21. public DbSet<Customer> Customers { get; set; }
  22. public DbSet<Employee> Employees { get; set; }
  23. public DbSet<Order_Detail> Order_Details { get; set; }
  24. public DbSet<Order> Orders { get; set; }
  25. public DbSet<Product> Products { get; set; }
  26. public DbSet<Region> Regions { get; set; }
  27. public DbSet<Shipper> Shippers { get; set; }
  28. public DbSet<Supplier> Suppliers { get; set; }
  29. public DbSet<Territory> Territories { get; set; }
  30. public DbSet<Alphabetical_list_of_product> Alphabetical_list_of_products { get; set; }
  31. public DbSet<Category_Sales_for_1997> Category_Sales_for_1997 { get; set; }
  32. public DbSet<Current_Product_List> Current_Product_Lists { get; set; }
  33. public DbSet<Customer_and_Suppliers_by_City> Customer_and_Suppliers_by_Cities { get; set; }
  34. public DbSet<Invoice> Invoices { get; set; }
  35. public DbSet<Order_Details_Extended> Order_Details_Extendeds { get; set; }
  36. public DbSet<Order_Subtotal> Order_Subtotals { get; set; }
  37. public DbSet<Orders_Qry> Orders_Qries { get; set; }
  38. public DbSet<Product_Sales_for_1997> Product_Sales_for_1997 { get; set; }
  39. public DbSet<Products_Above_Average_Price> Products_Above_Average_Prices { get; set; }
  40. public DbSet<Products_by_Category> Products_by_Categories { get; set; }
  41. public DbSet<Sales_by_Category> Sales_by_Categories { get; set; }
  42. public DbSet<Sales_Totals_by_Amount> Sales_Totals_by_Amounts { get; set; }
  43. public DbSet<Summary_of_Sales_by_Quarter> Summary_of_Sales_by_Quarters { get; set; }
  44. public DbSet<Summary_of_Sales_by_Year> Summary_of_Sales_by_Years { get; set; }
  45.  
  46. protected override void OnModelCreating(DbModelBuilder modelBuilder)
  47. {
  48. modelBuilder.Configurations.Add(new CategoryMap());
  49. modelBuilder.Configurations.Add(new CustomerDemographicMap());
  50. modelBuilder.Configurations.Add(new CustomerMap());
  51. modelBuilder.Configurations.Add(new EmployeeMap());
  52. modelBuilder.Configurations.Add(new Order_DetailMap());
  53. modelBuilder.Configurations.Add(new OrderMap());
  54. modelBuilder.Configurations.Add(new ProductMap());
  55. modelBuilder.Configurations.Add(new RegionMap());
  56. modelBuilder.Configurations.Add(new ShipperMap());
  57. modelBuilder.Configurations.Add(new SupplierMap());
  58. modelBuilder.Configurations.Add(new TerritoryMap());
  59. modelBuilder.Configurations.Add(new Alphabetical_list_of_productMap());
  60. modelBuilder.Configurations.Add(new Category_Sales_for_1997Map());
  61. modelBuilder.Configurations.Add(new Current_Product_ListMap());
  62. modelBuilder.Configurations.Add(new Customer_and_Suppliers_by_CityMap());
  63. modelBuilder.Configurations.Add(new InvoiceMap());
  64. modelBuilder.Configurations.Add(new Order_Details_ExtendedMap());
  65. modelBuilder.Configurations.Add(new Order_SubtotalMap());
  66. modelBuilder.Configurations.Add(new Orders_QryMap());
  67. modelBuilder.Configurations.Add(new Product_Sales_for_1997Map());
  68. modelBuilder.Configurations.Add(new Products_Above_Average_PriceMap());
  69. modelBuilder.Configurations.Add(new Products_by_CategoryMap());
  70. modelBuilder.Configurations.Add(new Sales_by_CategoryMap());
  71. modelBuilder.Configurations.Add(new Sales_Totals_by_AmountMap());
  72. modelBuilder.Configurations.Add(new Summary_of_Sales_by_QuarterMap());
  73. modelBuilder.Configurations.Add(new Summary_of_Sales_by_YearMap());
  74. }
  75. }
  76. }

最终来查看一下生成的文件

代码调用实例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using CodeFirstPowerTools.Models;
  7.  
  8. namespace CodeFirstPowerTools
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. using (var db = new NorthwindContext())
  15. {
  16. IQueryable<Order> orders = from order in db.Orders
  17. where order.OrderID < 10256
  18. select order;
  19. foreach (Order order in orders)
  20. {
  21. Console.WriteLine(order.ShipCity);
  22. }
  23. }
  24. Console.ReadLine();
  25. }
  26. }
  27. }

执行后结果如下

简单的使用到此为止。

Entity Framework 自动生成CodeFirst代码的更多相关文章

  1. MetadataType来帮助entity framework自动生成的代码进行标注

    真的是,用的时候就四处google,还是记在这里容易找 [MetadataType(typeof(Person.Metadata))] public partial class Person { pr ...

  2. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  3. Entity Framework 自动生成代码 如何用继承

    分部类 用接口

  4. Oracle中使用Entity Framework 6.x Code-First

    Oracle中使用Entity Framework 6.x Code-First方式开发 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下O ...

  5. 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明

    一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...

  6. [Dynamic Language] 用Sphinx自动生成python代码注释文档

    用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...

  7. wsdl自动生成Java代码,根据wsdl生成Java代码

    wsdl自动生成Java代码,根据wsdl生成Java代码 >>>>>>>>>>>>>>>>>&g ...

  8. 使用xorm工具,根据数据库自动生成 go 代码

    使用xorm工具,根据数据库自动生成 go 代码 引入 使用 golang 操作数据库的同学都会遇到一个问题 -- 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可 ...

  9. mybatis自动生成java代码

    SSM框架没有DB+Record模式,写起来特别费劲,只能用下面的方法勉强凑合. 上图中,*.jar为下载的,src为新建的空白目录,.xml配置如下. <?xml version=" ...

随机推荐

  1. Mtk Ft6306 touch 驱动 .

    1.1.    MTK Touch 驱动的组成Mtk  Touch  driver 驱动包括:Mtk platform 虚拟平台设备驱动.Module touch IC 驱动.Input subsys ...

  2. angular_form

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. eclipse中安装svn插件

    Eclipse安装SVN 1.help->Install New Software2.Work With,点击add      name:subclipse      url:http://su ...

  4. 关于js字符串替换的一道笔试题目

    题目描述 请写出一个字符串转换函数,接受两个参数: 1.字符串 形如{a}ab-{b}cde{c}fff{d}{}: 2.对象,形如{'a':'1','b':'2','d':'4'} 根据,对象的属性 ...

  5. Ibatis学习总结4--SQL Map XML 映射文件扩展

    SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...

  6. DVR分布式路由

    1. 背景 没有使用DVR的场景: 从图中可以明显看到东西向和南北向的流量会集中到网络节点,这会使网络节点成为瓶颈. 如果启用DVR,如下图: 对于东西向的流量, 流量会直接在计算节点之间传递. 对于 ...

  7. 【UVALive 7334】Kernel Knights

    题 题意 有两个队的骑士1到n和n+1到2n,每个骑士只能互相攻击对手队的一个骑士.kernel的意思是在这个kernel里的骑士不会互相攻击,在kernel外的骑士被kernel里的骑士攻击. 现在 ...

  8. 移动H5页面,keyup事件不好使用处理解决

    1.mouse事件换成touch,pointer事件,keyup换成textInput事件

  9. 记录一次MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。

    在部署到IIS7时,MVC3报了一个找不到资源的错误,文件肯定是有的,而且页面是肯定报错的,也就说内部运行错误了,而MVC把错误没有抛出来而已: 所以对症下药,发觉我的项目里面用了rexs进行多语言, ...

  10. Vijos1056 图形面积

    描述 桌面上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积. 格式 输入格式 输入第一行为一个数N(1≤N≤100),表示矩形的数量.下面N行,每行四个整数,分别表 ...