前言

在前面的文章中我们提到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

配置好数据库链接,

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

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

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

using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using CodeFirstPowerTools.Models.Mapping; namespace CodeFirstPowerTools.Models
{
public partial class NorthwindContext : DbContext
{
static NorthwindContext()
{
Database.SetInitializer<NorthwindContext>(null);
} public NorthwindContext()
: base("Name=NorthwindContext")
{
} public DbSet<Category> Categories { get; set; }
public DbSet<CustomerDemographic> CustomerDemographics { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Order_Detail> Order_Details { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<Region> Regions { get; set; }
public DbSet<Shipper> Shippers { get; set; }
public DbSet<Supplier> Suppliers { get; set; }
public DbSet<Territory> Territories { get; set; }
public DbSet<Alphabetical_list_of_product> Alphabetical_list_of_products { get; set; }
public DbSet<Category_Sales_for_1997> Category_Sales_for_1997 { get; set; }
public DbSet<Current_Product_List> Current_Product_Lists { get; set; }
public DbSet<Customer_and_Suppliers_by_City> Customer_and_Suppliers_by_Cities { get; set; }
public DbSet<Invoice> Invoices { get; set; }
public DbSet<Order_Details_Extended> Order_Details_Extendeds { get; set; }
public DbSet<Order_Subtotal> Order_Subtotals { get; set; }
public DbSet<Orders_Qry> Orders_Qries { get; set; }
public DbSet<Product_Sales_for_1997> Product_Sales_for_1997 { get; set; }
public DbSet<Products_Above_Average_Price> Products_Above_Average_Prices { get; set; }
public DbSet<Products_by_Category> Products_by_Categories { get; set; }
public DbSet<Sales_by_Category> Sales_by_Categories { get; set; }
public DbSet<Sales_Totals_by_Amount> Sales_Totals_by_Amounts { get; set; }
public DbSet<Summary_of_Sales_by_Quarter> Summary_of_Sales_by_Quarters { get; set; }
public DbSet<Summary_of_Sales_by_Year> Summary_of_Sales_by_Years { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CategoryMap());
modelBuilder.Configurations.Add(new CustomerDemographicMap());
modelBuilder.Configurations.Add(new CustomerMap());
modelBuilder.Configurations.Add(new EmployeeMap());
modelBuilder.Configurations.Add(new Order_DetailMap());
modelBuilder.Configurations.Add(new OrderMap());
modelBuilder.Configurations.Add(new ProductMap());
modelBuilder.Configurations.Add(new RegionMap());
modelBuilder.Configurations.Add(new ShipperMap());
modelBuilder.Configurations.Add(new SupplierMap());
modelBuilder.Configurations.Add(new TerritoryMap());
modelBuilder.Configurations.Add(new Alphabetical_list_of_productMap());
modelBuilder.Configurations.Add(new Category_Sales_for_1997Map());
modelBuilder.Configurations.Add(new Current_Product_ListMap());
modelBuilder.Configurations.Add(new Customer_and_Suppliers_by_CityMap());
modelBuilder.Configurations.Add(new InvoiceMap());
modelBuilder.Configurations.Add(new Order_Details_ExtendedMap());
modelBuilder.Configurations.Add(new Order_SubtotalMap());
modelBuilder.Configurations.Add(new Orders_QryMap());
modelBuilder.Configurations.Add(new Product_Sales_for_1997Map());
modelBuilder.Configurations.Add(new Products_Above_Average_PriceMap());
modelBuilder.Configurations.Add(new Products_by_CategoryMap());
modelBuilder.Configurations.Add(new Sales_by_CategoryMap());
modelBuilder.Configurations.Add(new Sales_Totals_by_AmountMap());
modelBuilder.Configurations.Add(new Summary_of_Sales_by_QuarterMap());
modelBuilder.Configurations.Add(new Summary_of_Sales_by_YearMap());
}
}
}

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

代码调用实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CodeFirstPowerTools.Models; namespace CodeFirstPowerTools
{
class Program
{
static void Main(string[] args)
{
using (var db = new NorthwindContext())
{
IQueryable<Order> orders = from order in db.Orders
where order.OrderID < 10256
select order;
foreach (Order order in orders)
{
Console.WriteLine(order.ShipCity);
}
}
Console.ReadLine();
}
}
}

执行后结果如下

简单的使用到此为止。

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. 字符串匹配(KMP算法)

    KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法. 举个例子来说,如果 ...

  2. jQuery 模板插件jquery-tmpl

    Step1:导入脚本: <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")">&l ...

  3. 高层次综合(HLS)-简介

    本文是我近段时间的学习总结,主要参考了Xilinx的技术文档以及部分网上其他资料.文档主要包括ug998<Introduction to FPGA Design Using High-Level ...

  4. 标准I/O

    在程序运行时,会默认为我们打开三个流:标准输入流.标准输出流.标准出错流. 标准输入流一般对应我们的键盘 标准输出流一般对应显示器 标准出错流一般也对应显示器 1.标准输入流 在标准I/O中,java ...

  5. qt添加最小化和关闭按钮

    int width = this->width();//获取界面的宽度 //构建最小化.最大化.关闭按钮 QToolButton *minButton = new QToolButton(thi ...

  6. 网络流量监控工具----iftop

    文章转自:http://www.vpser.net/manage/iftop.html.再次本人只是作为笔记使用,不做其他用途. 日常工作中用它来监控网卡的实时流量,(可以指定网段),反向解析IP.显 ...

  7. 【POJ 2485】Highways(Prim最小生成树)

    题目 Prim算法:任选一个点,加入集合,找出和它最近的点,加入集合,然后用加入集合的点去更新其它点的最近距离......这题求最小生成树最大的边,于是每次更新一下最大边. #include < ...

  8. 【HDU 2604】Queuing

    题 题意 f和m两种字母组成字符串,fmf 和 fff 这种为不安全的字符串,现在有2*L个字母,问你有多少安全的字符串.答案mod M. 分析 递推,这题本意是要用矩阵快速幂.不过我发现这题好神奇, ...

  9. Python装饰器笔记

    DRY(Don't Repeat Yourself)原则: 一般是指在写代码的时候尽量避免重复的实现.违反DRY原则导致的坏处很容易理解,例如维护困难,修改时一旦遗漏就会产生不易察觉的问题. 一.函数 ...

  10. NOI题库-小学奥赛QwQ

    今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...