前言

在前面的文章中我们提到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. iOS——关于创建真机调试证书(发布证书,测试(调试)证书,推送调试证书)、iOS开发者账号申请 请用开发者账号去iTunes connect 查看状态

  2. Convert和Parse对null值处理的区别

    类型的转换在日常的变成中是经常被用到的,我们最常用的类型转换的方法就是Convert和Parse, 下面来说一下这两者null值处理的区别. int i1 = Convert.ToInt32(null ...

  3. CodeForces 166E -Tetrahedron解题报告

    这是本人写的第一次博客,学了半年的基础C语言,初学算法,若有错误还请指正. 题目链接:http://codeforces.com/contest/166/problem/E E. Tetrahedro ...

  4. 如何添加win10命令提示符字体,美化显示效果

    如图,win10命令提示符的字体真让人难受的要死,难道就不能改成好看一点的吗?笔者开始了停不下来的百度和Google 在查找了大量零碎或者过时的资料后,终于找到了一篇看起来还是很靠谱的文章: Quic ...

  5. 学习之路三十五:Android和WCF通信 - 大数据压缩后传输

    最近一直在优化项目的性能,就在前几天找到了一些资料,终于有方案了,那就是压缩数据. 一丶前端和后端的压缩和解压缩流程 二丶优点和缺点 优点:①字符串的压缩率能够达到70%-80%左右 ②字符串数量更少 ...

  6. AngularJS-MVC

    前言: 编程是一个很苦恼的工作,因为需要我们不断的去学习,不断的去专研,我本身就不是一个很喜欢学习的孩子,要不然从小到大也没有成绩好过,但是,我从来没有缺少过勤奋,还是让我们言归正传来说下 我们这段时 ...

  7. beta汇总

    第一天:http://www.cnblogs.com/hxh969012806/p/5034085.html 第二天:http://www.cnblogs.com/zyk150910/p/503783 ...

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

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

  9. 在Windows和UNIX下利用PHP和LDAP进行身份验证

    我现在的老板曾要求我为企业内部的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者L ...

  10. DML语言练习,数据增删改查,复制清空表

    Connected Connected as TEST@ORCL SQL> select * from t_hq_bm; BUMBM BUMMC DIANH ---------- ------- ...