Entity?Framework使用配置伙伴創(chuàng)建數(shù)據(jù)庫(kù)
在上一篇文章中講了如何使用fluent API來創(chuàng)建數(shù)據(jù)表,不知道你有沒有注意到一個(gè)問題。上面的OnModelCreating方法中,我們只配置了一個(gè)類Product,也許代碼不是很多,但也不算很少,如果我們有1000個(gè)類怎么辦?都寫在這一個(gè)方法中肯定不好維護(hù)。EF提供了另一種方式來解決這個(gè)問題,那就是為每個(gè)實(shí)體類單獨(dú)創(chuàng)建一個(gè)配置類。然后在OnModelCreating方法中調(diào)用這些配置伙伴類。
創(chuàng)建Product實(shí)體類:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity.ModelConfiguration;
namespace EF配置伙伴.Model
{
public class Product
{
public int ProductNo { get; set; }
public string ProductName { get; set; }
public double ProductPrice { get; set; }
}
}創(chuàng)建Product實(shí)體類的配置類:ProductMap,配置類需要繼承自EntityTypeConfiguration泛型類,EntityTypeConfiguration位于System.Data.Entity.ModelConfiguration命名空間下,ProductMap類如下:
using EF配置伙伴.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
namespace EF配置伙伴.EDM
{
public class ProductMap :EntityTypeConfiguration<Product>
{
public ProductMap()
{
// 設(shè)置生成的表名稱
ToTable("ProductConfiguration");
// 設(shè)置生成表的主鍵
this.HasKey(p => p.ProductNo);
// 修改生成的列名
this.Property(p =>p.ProductNo).HasColumnName("Id");
this.Property(p => p.ProductName)
.IsRequired() // 設(shè)置 ProductName列是必須的
.HasColumnName("Name"); // 將ProductName映射到數(shù)據(jù)表的Name列
}
}
}在數(shù)據(jù)上下文Context類的OnModelCreating()方法中調(diào)用:
using EF配置伙伴.EDM;
using EF配置伙伴.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
namespace EF配置伙伴.EFContext
{
public class Context:DbContext
{
public Context()
: base("DbConnection")
{ }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 添加Product類的配置類
modelBuilder.Configurations.Add(new ProductMap());
base.OnModelCreating(modelBuilder);
}
}
}查看數(shù)據(jù)庫(kù),可以看到符合我們的更改:

這種寫法和使用modelBuilder是幾乎一樣的,只不過這種方法更好組織處理多個(gè)實(shí)體。你可以看到上面的語(yǔ)法和寫jQuery的鏈?zhǔn)骄幊桃粯?,這種方式的鏈?zhǔn)綄懛ň徒蠪luent API。
到此這篇關(guān)于Entity Framework使用配置伙伴創(chuàng)建數(shù)據(jù)庫(kù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Entity?Framework使用Fluent?API配置案例
- Entity?Framework實(shí)現(xiàn)數(shù)據(jù)遷移
- Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)
- Entity Framework常用查詢語(yǔ)句
- Entity Framework中執(zhí)行sql語(yǔ)句
- Entity Framework系統(tǒng)架構(gòu)與原理介紹
- Entity?Framework?Core實(shí)現(xiàn)Like查詢?cè)斀?/a>
- Entity Framework Core批處理SQL語(yǔ)句
- Entity Framework Core實(shí)現(xiàn)軟刪除與查詢過濾器
- Entity Framework Core生成列并跟蹤列記錄
- Entity?Framework實(shí)體拆分多個(gè)表
相關(guān)文章
Javascript 直接調(diào)用服務(wù)器C#代碼 ASP.NET Ajax實(shí)例
近來總有一些朋友會(huì)問到一些入門的問題,把這些問題整理一下,寫出來。在以前的文章里,曾經(jīng)利用純JS編寫過Ajax引擎,在真正開發(fā)的時(shí)候,大家都不喜歡以這種低效率的方式開發(fā),利用MS Ajax的集成的引擎,可以簡(jiǎn)單不少工作。2010-03-03
VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼
現(xiàn)在,對(duì)于用戶在Web頁(yè)面上或電話中給出的Email地址,我們?cè)絹碓讲桓铱隙ㄋ欠裾娴挠行?。在今天這個(gè)垃圾郵件泛濫成災(zāi)的年代,人們完全有理由舍不得輕易透露Email地址。2011-04-04
ASP.NET Core 導(dǎo)入導(dǎo)出Excel xlsx 文件實(shí)例
本篇文章主要介紹了ASP.NET Core 導(dǎo)入導(dǎo)出Excel xlsx 文件,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12
ASP.NET中實(shí)現(xiàn)導(dǎo)出ppt文件數(shù)據(jù)的實(shí)例分享
這篇文章主要介紹了ASP.NET中實(shí)現(xiàn)導(dǎo)出ppt文件數(shù)據(jù)的實(shí)例分享,實(shí)例代碼用C#語(yǔ)言編寫,利用.NET的庫(kù)實(shí)現(xiàn)起來還是比較簡(jiǎn)潔的,需要的朋友可以參考下2016-02-02
解決Win10無法安裝.Net Framework 3.5提示錯(cuò)誤代碼0x800F081F
這篇文章主要介紹了Win10無法安裝.Net Framework 3.5提示錯(cuò)誤代碼0x800F081F的完美解決方法,需要的朋友可以參考下2017-12-12
asp.net URL中包含中文參數(shù)造成亂碼的解決方法
中文亂碼一直以來是WEB開發(fā)中比較常見的問題之一,對(duì)于初學(xué)者來說,各種各樣的編碼方式可能會(huì)有點(diǎn)不適應(yīng),本篇文章并不講述這些編碼,而是把自己遇到的一個(gè)小問題以及該問題的解決之法說明一下,希望對(duì)大家有用。2010-03-03
GridView中動(dòng)態(tài)設(shè)置CommandField是否可用或可見的小例子
GridView中動(dòng)態(tài)設(shè)置CommandField是否可用或可見的小例子,需要的朋友可以參考一下2013-05-05
asp.net錯(cuò)誤捕獲(錯(cuò)誤處理)page_error事件使用方法
Page_Error事件提供了一種捕獲頁(yè)面級(jí)錯(cuò)誤的方法。對(duì)于錯(cuò)誤的處理,您可以只是顯示錯(cuò)誤信息(正如下面的示例代碼所示),也可以記錄事件或執(zhí)行某個(gè)其他操作2014-01-01

