• Entity Framework 自动生成CodeFirst代码


    前言

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

     执行后结果如下

     

    简单的使用到此为止。

  • 相关阅读:
    理解并使用.NET 4.5中的HttpClient
    响应式图片的3种解决方案
    Rest模式get,put,post,delete含义与区别
    Multiple websites on single instance of IIS
    C# 消息队列-MSMQ
    微服务 Micro services
    SQL Server For XML
    Real-time chart using ASP.NET Core and WebSocket
    ASP.NET Core Building chat room using WebSocket
    Ajax 调用的WCF
  • 原文地址:https://www.cnblogs.com/aehyok/p/3325501.html
Copyright © 2020-2023  润新知