最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Entity?Framework使用Fluent?API配置案例

 更新時(shí)間:2022年03月04日 11:46:04   作者:.NET開發(fā)菜鳥  
本文詳細(xì)講解了Entity?Framework使用Fluent?API配置案例的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、配置主鍵

要顯式將某個(gè)屬性設(shè)置為主鍵,可使用 HasKey 方法。在以下示例中,使用了 HasKey 方法對(duì) Product 類型配置 ProductId 主鍵。

1、新加Product類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Model
{
    public class Product
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public decimal Price { get; set; }
    }
}

2、新建ProductMap類,用來設(shè)置主鍵

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using FluentAPI.Model;

namespace FluentAPI.Data.FluentAPIMap
{
    public class ProductMap : EntityTypeConfiguration<Product>
    {
        public ProductMap()
        {
            //使用 HasKey 方法對(duì) Product 類型配置 ProductId 主鍵。
            this.HasKey(p => p.ProductId);
        }
    }
}

3、查看數(shù)據(jù)庫

二、配置復(fù)合主鍵

以下示例配置要作為Department 類型的組合主鍵的DepartmentID 和 Name 屬性。

1、創(chuàng)建Department類:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Model
{
    public class Department
    {
        public int DepartmentId { get; set; }
        public string Name { get; set; }
        public decimal Budget { get; set; }
        public DateTime StartDate { get; set; }
    }
}

2、創(chuàng)建DepartmentMap類,用來設(shè)置復(fù)合主鍵

using FluentAPI.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Data.FluentAPIMap
{
    public class DepartmentMap : EntityTypeConfiguration<Department>
    {
        public DepartmentMap()
        {
            // 使用匿名類的方式配置DepartmentId和Name作為復(fù)合主鍵
            this.HasKey(p => new {p .DepartmentId,p.Name});
        }
    }
}

3、查看數(shù)據(jù)庫

使用EF的數(shù)據(jù)遷移,然后查看數(shù)據(jù)庫表

三、關(guān)閉數(shù)值主鍵的標(biāo)識(shí)

數(shù)值主鍵的標(biāo)識(shí)DatabaseGeneratedOption是一個(gè)枚舉值,該枚舉值具有下面三個(gè)值:

DatabaseGeneratedOption.None:關(guān)閉數(shù)值主鍵。
DatabaseGeneratedOption.Identity:設(shè)置數(shù)值主鍵 自動(dòng)增長(zhǎng) ,
DatabaseGeneratedOption.Computed :數(shù)值主鍵的值由計(jì)算得到(此列將無法插入值)。

1、設(shè)置關(guān)閉數(shù)值主鍵

using FluentAPI.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Data.FluentAPIMap
{
    public class DepartmentMap : EntityTypeConfiguration<Department>
    {
        public DepartmentMap()
        {
            // 使用匿名類的方式配置DepartmentId和Name作為復(fù)合主鍵
            this.HasKey(p => new {p .DepartmentId,p.Name});

            // 以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數(shù)據(jù)庫生成。
            this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        }
    }
}

2、插入數(shù)據(jù)庫表的時(shí)候DepartmentId列要顯示的指定值:

INSERT INTO Departments VALUES (1, '人事部',12.3,GETDATE());

四、指定屬性的最大長(zhǎng)度

HasMaxLength可以設(shè)置表中列的最大長(zhǎng)度。

using FluentAPI.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Data.FluentAPIMap
{
    public class DepartmentMap : EntityTypeConfiguration<Department>
    {
        public DepartmentMap()
        {
            // 使用匿名類的方式配置DepartmentId和Name作為復(fù)合主鍵
            this.HasKey(p => new {p .DepartmentId,p.Name});

            // 以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數(shù)據(jù)庫生成。
            //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            //  以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值由數(shù)據(jù)庫自動(dòng)生成。
            //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            //Name屬性不應(yīng)超過 50 個(gè)字符。如果其值超過 50 個(gè)字符,則出現(xiàn) DbEntityValidationException 異常。
            //如果 Code First 基于此模型創(chuàng)建數(shù)據(jù)庫,它還會(huì)將 Name 列的最大長(zhǎng)度設(shè)置為50 個(gè)字符。
            this.Property(p => p.Name).HasMaxLength(50);

        }
    }
}

五、將屬性配置為必需

using FluentAPI.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Data.FluentAPIMap
{
    public class DepartmentMap : EntityTypeConfiguration<Department>
    {
        public DepartmentMap()
        {
            // 使用匿名類的方式配置DepartmentId和Name作為復(fù)合主鍵
            this.HasKey(p => new {p .DepartmentId,p.Name});

            // 以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數(shù)據(jù)庫生成。
            //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            //  以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值由數(shù)據(jù)庫自動(dòng)生成。
            //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            //Name屬性不應(yīng)超過 50 個(gè)字符。如果其值超過 50 個(gè)字符,則出現(xiàn) DbEntityValidationException 異常。
            //如果 Code First 基于此模型創(chuàng)建數(shù)據(jù)庫,它還會(huì)將 Name 列的最大長(zhǎng)度設(shè)置為50 個(gè)字符。
            this.Property(p => p.Name).HasMaxLength(50);

            /*
            Name屬性是必需的。如果不指定 Name,則出現(xiàn) DbEntityValidationException 異常。如果 Code First 基于此模型創(chuàng)建數(shù)據(jù)庫,則用于存儲(chǔ)此屬性的列將不可為空。
            */
            this.Property(p => p.Name).IsRequired();

        }
    }
}

六、指定不將CLR 屬性映射到數(shù)據(jù)庫中的列

using FluentAPI.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Data.FluentAPIMap
{
    public class DepartmentMap : EntityTypeConfiguration<Department>
    {
        public DepartmentMap()
        {
            // 使用匿名類的方式配置DepartmentId和Name作為復(fù)合主鍵
            this.HasKey(p => new {p .DepartmentId,p.Name});

            // 以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數(shù)據(jù)庫生成。
            //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            //  以下示例將DepartmentID 屬性設(shè)置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值由數(shù)據(jù)庫自動(dòng)生成。
            //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            //Name屬性不應(yīng)超過 50 個(gè)字符。如果其值超過 50 個(gè)字符,則出現(xiàn) DbEntityValidationException 異常。
            //如果 Code First 基于此模型創(chuàng)建數(shù)據(jù)庫,它還會(huì)將 Name 列的最大長(zhǎng)度設(shè)置為50 個(gè)字符。
            this.Property(p => p.Name).HasMaxLength(50);

            /*
            Name屬性是必需的。如果不指定 Name,則出現(xiàn) DbEntityValidationException 異常。如果 Code First 基于此模型創(chuàng)建數(shù)據(jù)庫,則用于存儲(chǔ)此屬性的列將不可為空。
            */
            this.Property(p => p.Name).IsRequired();

            /*
           以下示例顯示如何指定CLR 類型的屬性不映射到數(shù)據(jù)庫中的列。
           Ignore 等同于數(shù)據(jù)注解NotMapped
           */
            this.Ignore(p => p.Budget);

        }
    }
}

七、將CLR 屬性映射到數(shù)據(jù)庫中的特定列

HasColumnName可以用來設(shè)置映射到數(shù)據(jù)庫表中列的列名。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using FluentAPI.Model;
using System.ComponentModel.DataAnnotations.Schema;

namespace FluentAPI.Data.FluentAPIMap
{
    public class ProductMap : EntityTypeConfiguration<Product>
    {
        public ProductMap()
        {
            //使用 HasKey 方法對(duì) Product 類型配置 ProductId 主鍵。
            this.HasKey(p => p.ProductId);

            /*
             * 以下示例將Price CLR 屬性映射到ProductPrice 數(shù)據(jù)庫列。
             */
            this.Property(p => p.Price).HasColumnName("ProductPrice");
        }
    }
}

八、配置字符串屬性是否支持Unicode 內(nèi)容

IsUnicode()方法可以用來設(shè)置是否支持Unicode字符,該方法有兩個(gè)重載函數(shù)。

1、沒有參數(shù)的重載,默認(rèn)支持Unicode字符

2、有參數(shù)的重載,參數(shù)為bool值,true支持Unicode,false不支持Unicode

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using FluentAPI.Model;
using System.ComponentModel.DataAnnotations.Schema;

namespace FluentAPI.Data.FluentAPIMap
{
    public class ProductMap : EntityTypeConfiguration<Product>
    {
        public ProductMap()
        {
            //使用 HasKey 方法對(duì) Product 類型配置 ProductId 主鍵。
            this.HasKey(p => p.ProductId);

            /*
             * 以下示例將Price CLR 屬性映射到ProductPrice 數(shù)據(jù)庫列。
             */
            this.Property(p => p.Price).HasColumnName("ProductPrice");

            /*
            * 默認(rèn)情況下,字符串為Unicode(SQLServer 中的nvarchar)。您可以使用IsUnicode 方法指定字符串應(yīng)為varchar 類型。
            */
            this.Property(p => p.PlaceOfOrigin).IsUnicode(false);
        }
    }
}

查看數(shù)據(jù)庫列類型:

九、配置數(shù)據(jù)庫列的數(shù)據(jù)類型

HasColumnType 方法支持映射到相同基本類型的不同表示。

/*
HasColumnType 方法支持映射到相同基本類型的不同表示。使用此方法并不支持在運(yùn)行時(shí)執(zhí)行任何數(shù)據(jù)轉(zhuǎn)換。
* 請(qǐng)注意,IsUnicode 是將列設(shè)置為 varchar 的首選方法,因?yàn)樗c數(shù)據(jù)庫無關(guān)。
*/
this.Property(p => p.Name).HasColumnType("varchar");

十、配置復(fù)雜類型的屬性

1、新建類Course,里面有一個(gè)Department類型的屬性:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPIApp.Model
{
    public class Course
    {
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }
        public virtual Department Department { get; set; }
    }
}
using FluentAPI.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FluentAPI.Data.FluentAPIMap
{
    public class CourseMap : EntityTypeConfiguration<Course>
    {
        public CourseMap()
        {
            /*可以使用點(diǎn)表示法訪問復(fù)雜類型的屬性。
              設(shè)置Course類里面的Department屬性的Name的最大長(zhǎng)度是32
             */
            this.Property(p => p.Department.Name).HasMaxLength(32);
        }
    }
}

十一、將CLR 實(shí)體類型映射到數(shù)據(jù)庫中的特定表

/*Department 的所有屬性都將映射到名為 t_ Department 的表中的列。*/
ToTable("t_Department");
/*您也可以這樣指定架構(gòu)名稱:*/
ToTable("t_Department", "school");

代碼地址:點(diǎn)此下載

到此這篇關(guān)于Entity Framework使用Fluent API配置案例的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • asp.net 文件上傳實(shí)例匯總

    asp.net 文件上傳實(shí)例匯總

    文件上傳在asp.net中有很多方法,這里我很給各位介紹最簡(jiǎn)單最方便的.net文件上傳實(shí)例,希望給各位.net入門者帶來幫助
    2014-01-01
  • 發(fā)布一個(gè)基于TokyoTyrant的C#客戶端開源項(xiàng)目

    發(fā)布一個(gè)基于TokyoTyrant的C#客戶端開源項(xiàng)目

    目前在網(wǎng)上關(guān)于TokyoCabinet(以下簡(jiǎn)稱TC)和TokyoTyrant(以下簡(jiǎn)稱TT)的資料已相對(duì)豐富了,但在.NET平臺(tái)上的客戶端軟件卻相對(duì)匱乏,因?yàn)樽鯠iscuz!NT企業(yè)版的關(guān)系,兩個(gè)月前開始接觸TC和TT,開始寫相關(guān)的客戶端代碼。
    2010-07-07
  • WPF自定義路由事件

    WPF自定義路由事件

    這篇文章介紹了WPF自定義路由事件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • .NET8中g(shù)RPC的使用方法詳解

    .NET8中g(shù)RPC的使用方法詳解

    gRPC是一種高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,基于 HTTP/2 協(xié)議,支持雙向流、頭部壓縮等特性,下面我們就來看看.NET8下gRPC的具體使用吧
    2025-03-03
  • 一文輕松了解ASP.NET與ASP.NET?Core多環(huán)境配置對(duì)比

    一文輕松了解ASP.NET與ASP.NET?Core多環(huán)境配置對(duì)比

    ASP.NET?Core支持在多個(gè)環(huán)境中管理應(yīng)用程序,如開發(fā)(Development),預(yù)演(Staging)和生產(chǎn)(Production),下面這篇文章主要給大家介紹了關(guān)于ASP.NET與ASP.NET?Core多環(huán)境配置對(duì)比?的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • ASP.NET Core環(huán)境變量配置和啟動(dòng)設(shè)置講解

    ASP.NET Core環(huán)境變量配置和啟動(dòng)設(shè)置講解

    這篇文章介紹了ASP.NET Core環(huán)境變量配置和啟動(dòng)設(shè)置的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • ASP.NET Mvc開發(fā)之查詢數(shù)據(jù)

    ASP.NET Mvc開發(fā)之查詢數(shù)據(jù)

    這篇文章主要介紹了ASP.NET Mvc開發(fā)之查詢數(shù)據(jù)的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 使用 Visual Studio 的“代碼度量值”來改進(jìn)代碼質(zhì)量

    使用 Visual Studio 的“代碼度量值”來改進(jìn)代碼質(zhì)量

    代碼度量是一組軟件度量值,使開發(fā)人員可以更好地了解他們正在開發(fā)的代碼.這篇文章主要介紹了通過 Visual Studio 的“代碼度量值”來改進(jìn)代碼質(zhì)量,需要的朋友可以參考下
    2017-11-11
  • GridView導(dǎo)出Excel實(shí)現(xiàn)原理與代碼

    GridView導(dǎo)出Excel實(shí)現(xiàn)原理與代碼

    使用GridView來展示數(shù)據(jù)庫表,幾乎沒對(duì)GridView的格式做什么設(shè)定,從配置文件中加載SQL,跑出數(shù)據(jù)就直接綁定到GridView,接下來介紹導(dǎo)出Excel的功能感興趣的朋友可以參考下
    2013-01-01

最新評(píng)論

蓬莱市| 庆阳市| 鄂温| 盐亭县| 盐池县| 林周县| 贵南县| 边坝县| 黄陵县| 台江县| 尉氏县| 颍上县| 墨玉县| 大埔县| 平和县| 清河县| 通渭县| 如东县| 岚皋县| 宁津县| 富蕴县| 滨海县| 饶阳县| 福贡县| 湖北省| 通州区| 新兴县| 资溪县| 宣武区| 神农架林区| 河北区| 定日县| 苏尼特右旗| 新兴县| 墨玉县| 瑞安市| 汝南县| 天柱县| 那曲县| 塔城市| 微博|