zoukankan      html  css  js  c++  java
  • Entity Framework 6 初体验

    Entity Framework中有三种模式 Code First, Model First和Database First, Code First 是在EF4中新增的模式, 也跟NHibernate等ORM框架越来越接近了。

    今天我们来做个 Code First 模式的 简单例子  

    Code First 

      为了支持以设计为中心的开发流程,EF4 还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你:

    在不使用设计器或者定义一个 XML 映射文件的情况下进行开发。

      ·允许编写简单的模型对象POCO (plain old classes),而不需要基类。

      ·通过"约定优于配置",使得数据库持久层不需要任何的配置

      ·也可以覆盖"约定优于配置",通过流畅的 API 来完全定制持层的映射。

      Code First是基于Entity Framework的新的开发模式,原先只有Database First和Model First两种。Code First顾名思义,就是先用C#/VB.NET的类定义好你的领域模型,然后用这些类映射到现有的数据库或者产生新的数据库结构。Code First同样支持通过Data Annotations或fluent API进行定制化配置

    Database First

      是最老也是应用得最广泛的一种设计方式。如上文提到过的那样,Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来创建模型。如果后期需求有所变更或者功能有很大变化的话,需要涉及到更改数据库所付出的代价将会很大,因为之前编写好的代码将不再适用于新的表,我们必需重构以更改代码中的逻辑以适应更改之后的表。

    Ÿ  

    Model First

      是创建ADO.NET实体对象以及它们之间的关系,然后再指定到数据库的映射。这个实体对象即为Model。

     

    首先在GuGet程序包管理器中 下载安装 EF

     

    1.新建表数据模型

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text; 
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity;
    
    namespace EFSample.Model
    {
        [Table("T_Car")]
        public class Car  
        { 
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int CarId
            { get; set; }
    
            [StringLength(50)]
            [Column("Brand")]
            public string Brand
            { get; set; }
    
            [StringLength(50)]
            [Column("CarModel")]
            public string CarModel
            { get; set; }
    
            [StringLength(50)]
            [Column("Color")]
            public string Color
            { get; set; }
    
            [Column("Price")]
            public decimal Price
            { get; set; }
             
    
        }
    
    }

    2. 数据生成器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration.Conventions;
    using EFSample.Model;
    
    
    namespace EFSample.DAL
    {
    
        /// <summary>
        /// DbContext 数据生成器
        /// </summary>
        public class CarContext : DbContext
        {
            public CarContext() : base("MyConn") { }
    
            public DbSet<Car> CarSet { set; get; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            { 
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
        }
    
    }

    3.新建一个控制台应用程序 来操作数据

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using EFSample.DAL;
    using EFSample.Model;
    
    namespace EFSample.Demo
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var db = new CarContext())
                {
    
                    //直接执行Sql语句
                    db.Database.ExecuteSqlCommand("delete from T_Car");
    
                    var car =
                        new Car { Brand = "宝马", CarModel = "Z4", Color = "白色", Price = 200 };
    
                    //批量添加记录
                    db.CarSet.Add(car);
    
                    //提交到db
                    db.SaveChanges();
                    
                    //查询
                    var query = db.CarSet.Where(c => c.Brand == "宝马").AsQueryable();
    
                    //输出Sql语句
                    Console.WriteLine(query.ToString());
    
                    List<Car> orderEntities = query.ToList();
    
                    foreach (var order in orderEntities)
                    {
                        Console.WriteLine(String.Format("ID:{0}/CustomerName:{1}/Amount:{2}/ItemCount:{3}", order.CarId, order.Brand, order.CarModel, 0));
                    }
                }
    
                Console.WriteLine("ok!");
                Console.Read();
    
            }
    
    
        }
    }

    4.配置文件App.config

    <?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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
    
    
      <connectionStrings>
        <!--连接字符串,使用SQLSERVER LocalDb-->
        <add name="MyConn" connectionString="Data Source=.;Initial Catalog=CarDatabase;Integrated Security=True" providerName="System.Data.SqlClient" />
      </connectionStrings>
    
      
    </configuration>

     

    结果展示

     

     

     

     

     

     

     

     

  • 相关阅读:
    Introduction to Mathematical Thinking
    学习 Unix 常用命令
    学习 《UNIX网络编程》
    学习编译并运行C代码
    Introduction to Mathematical Thinking
    Introduction to Mathematical Thinking
    CentOS 6和CentOS 7防火墙的关闭
    centOS 7下无法启动网络(service network start)错误解决办法(应该是最全的了。。。)
    虚拟机中的CentOS 7设置固定IP连接最理想的配置
    使用VMware安装CentOS7详请
  • 原文地址:https://www.cnblogs.com/dragon-L/p/4616449.html
Copyright © 2011-2022 走看看