1. 程式人生 > >.NET實體框架EF之CodeFirst

.NET實體框架EF之CodeFirst

ces 找到 生成 rst baidu eof frame esp namespace

  ADO.NET Entity Framework 以 Entity Data Model (EDM) 為主,將數據邏輯層切分為三塊,分別為 Conceptual Schema, Mapping Schema 與 Storage Schema 三層,其上還有 Entity Client,Object Context 以及 LINQ 可以使用。

一 、引入entityframework實體框架  

  新建項目後,這裏我使用的是entityframework連接Mysql數據庫:

項目右擊 >> 管理Nuget包 >> 瀏覽中找到entityframework,下載 >> 找到MySQL.Data.Entity,下載

  entityframework包

技術分享圖片

  

  MySQL.Data.Entity包:

技術分享圖片

二 、添加實體模型Model  

  可以任意創建一個實體測試,其中id無論有用與否都應該默認添加,系統會用作主鍵,此處我不做設置,待生成數據後查看是否會生產主鍵。

using System;

namespace EFDemo.Model
{
    public class person
    {
        public int id { get; set; }
        public string name { get; set; }
        
public DateTime dateTime { get; set; } } }

三 、添加數據上下文DbContext  

using EFDemo.Model;
using MySql.Data.Entity;
using System.Data.Entity;

namespace EFDemo
{
    [DbConfigurationType(typeof(MySqlEFConfiguration))]
    public class EntityDbContext : DbContext
    {
        public
EntityDbContext() : base("name=MyStrConn") { } public DbSet<person> persons { get; set; } } }

  特別註意:1. [DbConfigurationType(typeof(MySqlEFConfiguration))]特性是指明此處是使用Mysql數據庫,否則會默認找sqlserver數據庫,這裏需要引入using MySql.Data.Entity;名稱空間

       2. base("name=MyStrConn")為默認的上下文DbContext傳入連接字符串,從其重載重中可以看出一些端倪,鏈接字符串只支持這種格式即 “name=ConnectionString(配置節名)”的格式

技術分享圖片

  這裏展示一下非name的錯誤:

技術分享圖片

四 、當使用mysql時的配置  

  當添加MySQL.Data.Entity後會默認生成配置App.config配置文件,在配置中加入mysql的鏈接字符串如下,並且節點名需要與三中的base("name=MyStrConn")名稱一致。

<connectionStrings>
    <add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Server=127.0.0.1;Database=eftest; User=root;Password=root;"/>
  </connectionStrings>

  通過下面默認生成的配置中可以看到providers中增加了配置節點provider為mysql的配置。

<?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>
  <connectionStrings>
    <add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Server=127.0.0.1;Database=eftest; User=root;Password=root;"/>
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
      </provider></providers>
  </entityFramework>
</configuration>

五 、測試函數及結果  

  下面是插入一條數據:

namespace EFDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            EFDemo.Model.person p = new Model.person();
            p.name = "測試成功";
            p.dateTime = DateTime.Now;
            using (EntityDbContext entity = new EntityDbContext())
            {
                entity.persons.Add(p);
                entity.SaveChanges();
            }
        }
    }
}

  數據庫插入數據成功,並且將id設置為主鍵了:

技術分享圖片

技術分享圖片

  我的測試Demo: 歡迎點擊下載 提取碼:dt6d

.NET實體框架EF之CodeFirst