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>

 

结果展示

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/dragon-L/p/4616449.html