.net EF框架 MySql實現實例

来源:http://www.cnblogs.com/pengdylan/archive/2017/02/09/6383733.html
-Advertisement-
Play Games

1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework節點(一般安裝EF時自動添加) 2.配置system.data節點(一般安裝MySql.Data.Entity時自動添加) 3.添加連接串節點(以實際情況修改庫名、密 ...


1.nuget中添加包EF和MySql.Data.Entity

2.config文件添加如下配置

1.配置entitframework節點(一般安裝EF時自動添加)

 

  <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.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>

 


2.配置system.data節點(一般安裝MySql.Data.Entity時自動添加)

 

  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

 


3.添加連接串節點(以實際情況修改庫名、密碼等屬性)

 

  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=aceadmin;user id=root;password=xxx;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

 

3.添加實體類

添加AccountUser類

 1 using System;
 2 using System.ComponentModel.DataAnnotations;
 3 using System.ComponentModel.DataAnnotations.Schema;
 4 
 5 namespace EFCodeFirst.Entity
 6 {
 7     [Table("user")]
 8     public class AccountUser
 9     {
10         /// <summary>
11         /// 用戶ID
12         /// </summary>
13         [Column("ID")]
14         [Key]
15         public int AccountUserId { get; set; }
16 
17         /// <summary>
18         /// 用戶名
19         /// </summary>
20         public string Name { get; set; }
21 
22         /// <summary>
23         /// 年齡
24         /// </summary>
25         public Nullable<int> Age { get; set; }
26 
27         /// <summary>
28         /// 性別
29         /// </summary>
30         public Nullable<bool> Sex { get; set; }
31 
32     }
33 }

 

註:特性“Table”指定資料庫中與該實體產生映射的表名,預設不添加系統會去資料庫中尋找表名為:“類名+s”的表,找不到會報錯。

特性“Column”來指定映射表中的列名,如果屬性名與列名相同,則不用添加,系統預設屬性名與列名一致。

以上方式為Data Annotations模式(數據註解)映射資料庫方法。

EF還提供Fluent API配置來映射資料庫,下麵會講到。

4.添加Context實體對象

using System.Data.Entity;

namespace EFCodeFirst
{
    public class DContext : DbContext
    {
        /// <summary>
        /// 添加構造函數,name為config文件中資料庫連接字元串的name
        /// </summary>
        public DContext() : base("name=MyContext")
        {

        }

        #region 數據集
        public DbSet<AccountUser> AccountUsers { get; set; }

        #endregion  
    }
}

 


定義新的上下文類DContext集成DbContext

這裡聲明瞭與資料庫映射的對象AccountUser,以後可以直接用屬性AccountUsers來進行對資料庫的操作

註:一定要添加構造函數並指明config文件中資料庫連接字元串的name,否則系統將把資料庫預設指定到VS自帶的資料庫中

5.寫一個簡單的插入數據代碼運行看結果

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var user = new AccountUser()
                {
                    Name = "Test",
                    Sex = true,
                    Age = 29
                };
                using (var context = new DContext())
                {
                    context.AccountUsers.Add(user);
                    context.SaveChanges();
                    var accountUsers = context.AccountUsers.ToList();
                }
                Console.Write("{0}", user.AccountUserId);
            }
            catch (Exception ex)
            {
                Console.Write("{0}", ex);
            }
            Console.ReadLine();
        }
    }

 


至此EF框架連接MySql資料庫已經成功

6.使用Fluent API配置EF映射關係

1.添加新類省、市

    public class Provice
    {
        /// <summary>
        /// 省份ID
        /// </summary>
        public int ProviceId { get; set; }

        /// <summary>
        /// 省份名
        /// </summary>
        public string ProviceName { get; set; }

        /// <summary>
        /// 省份下城市
        /// </summary>
        public List<City> Citys { get; set; }
    }

    public class City
    {
        /// <summary>
        /// 城市ID
        /// </summary>
        public int CityId { get; set; }

        /// <summary>
        /// 所屬省份ID
        /// </summary>
        public int ProviceId { get; set; }

        /// <summary>
        /// 城市名稱
        /// </summary>
        public string CityName { get; set; }

        /// <summary>
        /// 所屬城市
        /// </summary>
        public Provice ProviceData { get; set; }
    }

 


2.添加Fluent API配置類,繼承自EntityTypeConfiguration對象

using System.Data.Entity.ModelConfiguration;

namespace EFCodeFirst
{
    public class ProviceConfiguration : EntityTypeConfiguration<Provice>
    {
        public ProviceConfiguration()
        {
            ToTable("provice")                                                  //映射表
                .HasKey(q => q.ProviceId)                                       //指定主鍵
                .HasMany(q => q.Citys).WithRequired(q => q.ProviceData).HasForeignKey(q => q.ProviceId);        //配置一對多關係
        }
    }
}

 

註:由於這裡添加了外鍵,則必須用WithRequired方法而不能用WithOption方法,否則報錯

using System.Data.Entity.ModelConfiguration;

namespace EFCodeFirst
{
    public class CityConfiguration : EntityTypeConfiguration<City>
    {
        public CityConfiguration()
        {
            ToTable("city")
            .HasKey(q => q.CityId)
            .Property(q => q.ProviceId).IsRequired();
        }
    }
}

 

一對多關係只用在一端配置,provice處配置後不需要在city端再配置

3.將Fluent API配置添加到DContext類中,重寫OnModelCreating方法

public class DContext : DbContext
    {
        /// <summary>
        /// 添加構造函數,name為config文件中資料庫連接字元串的name
        /// </summary>
        public DContext() : base("name=MyContext")
        {

        }

        #region 數據集
        public DbSet<AccountUser> AccountUsers { get; set; }
        public DbSet<Provice> Provices { get; set; }
        public DbSet<City> Citys { get; set; }
        #endregion

        #region Fluent API配置
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ProviceConfiguration());
            modelBuilder.Configurations.Add(new CityConfiguration());
        }
        #endregion
    }

 


4.main方法中級聯添加省、市

        static void Main(string[] args)
        {
            try
            {
                var provice = new Provice
                {
                    ProviceName = "河南省",
                    Citys = new List<City>()
                    {
                        new City() { CityName = "安陽"},
                        new City() { CityName = "鄭州"},
                        new City() { CityName = "洛陽"},
                    }
                };
                using (var context = new DContext())
                {
                    context.Provices.Add(provice);
                    context.SaveChanges();
                    var provices = context.Provices.Include("Citys").ToList();
                }
                Console.Write("{0}", provice.ProviceId);
            }
            catch (Exception ex)
            {
                Console.Write("{0}", ex);
            }

            Console.ReadLine();
        }

 


可以看到資料庫中同時向省表和市表中添加了相關數據

 

7.EF的Data Annotations與Fluent API是可以同時使用的,但同效果的配置只需要在二者之一中配置就好。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...