Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)
DbContext類有一個(gè)OnModelCreating方法,它用于流利地配置領(lǐng)域類到數(shù)據(jù)庫模式的映射。下面我們以fluent API的方式來定義映射。
首先,先將Product類注釋掉,重新編寫該類,重新編寫后的Product類:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFFluentAPI.Model
{
public class Product
{
public int ProductNo { get; set; }
public string ProductName { get; set; }
public double ProductPrice { get; set; }
}
}然后在數(shù)據(jù)庫上下文Context類中的OnModelCreating方法中使用fluent API來定義Product表的數(shù)據(jù)庫模式:
using EFFluentAPI.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFFluentAPI.EFContext
{
public class Context:DbContext
{
public Context()
: base("DbConnection")
{ }
public DbSet<Product> Products { get; set; }
/// <summary>
/// 重新OnModelCreating方法
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//映射到表Product,ProductNo和ProductName作為復(fù)合主鍵
modelBuilder.Entity<Product>().ToTable("Product").HasKey(p=>new {p.ProductNo,p.ProductName});
//ProductNo映射到數(shù)據(jù)表中的列名是Id
modelBuilder.Entity<Product>().Property(p => p.ProductNo).HasColumnName("Id");
modelBuilder.Entity<Product>().Property(p => p.ProductName)
.IsRequired() //設(shè)置ProductName是必須的,即不能為null,默認(rèn)是可以為null的
.IsUnicode() //設(shè)置ProductName列為Unicode字符,實(shí)際上默認(rèn)就是Unicode字符,所以該方法可以不寫。
.HasMaxLength(10); //設(shè)置ProductName列的最大長(zhǎng)度是10
base.OnModelCreating(modelBuilder);
}
}
}modelBuilder.Entity<Product>()會(huì)得到EntityTypeConfiguration類的一個(gè)實(shí)例。此外,使用fluent API的一個(gè)重要決定因素是我們是否使用了外部的POCO類,即實(shí)體模型類是否來自一個(gè)類庫。我們無法修改類庫中類的定義,所以不能通過數(shù)據(jù)注解來提供映射細(xì)節(jié)。這種情況下,我們必須使用fluent API。
什么是POCO?
POCO是指Plain Old Class Object,也就是最基本的CLR Class,在原先的EF中,實(shí)體類通常是從一個(gè)基類繼承下來的,而且?guī)в写罅康膶傩悦枋觥6鳳OCO則是指最原始的Class,換句話說這個(gè)實(shí)體的Class僅僅需要從Object繼承即可,不需要從某一個(gè)特定的基類繼承。主要是配合Code First使用。Code First則是指我們先定義POCO這樣的實(shí)體Class,然后生成數(shù)據(jù)庫。實(shí)際上現(xiàn)在也可以使用Entity Framweork Power tools將已經(jīng)存在的數(shù)據(jù)庫反向生成POCO的Class(不通過edmx文件)。
程序運(yùn)行后創(chuàng)建的數(shù)據(jù)庫如下圖所示:

到此這篇關(guān)于Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Entity?Framework使用Fluent?API配置案例
- Entity?Framework實(shí)現(xiàn)數(shù)據(jù)遷移
- Entity?Framework使用配置伙伴創(chuàng)建數(shù)據(jù)庫
- Entity Framework常用查詢語句
- Entity Framework中執(zhí)行sql語句
- Entity Framework系統(tǒng)架構(gòu)與原理介紹
- Entity?Framework?Core實(shí)現(xiàn)Like查詢?cè)斀?/a>
- Entity Framework Core批處理SQL語句
- Entity Framework Core實(shí)現(xiàn)軟刪除與查詢過濾器
- Entity Framework Core生成列并跟蹤列記錄
- Entity?Framework實(shí)體拆分多個(gè)表
相關(guān)文章
.NET使用System.Timers.Timer類實(shí)現(xiàn)程序定時(shí)執(zhí)行
這篇文章介紹了.NET使用System.Timers.Timer類實(shí)現(xiàn)程序定時(shí)執(zhí)行的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
.net core項(xiàng)目中常用的幾款類庫詳解(值得收藏)
這篇文章主要給大家介紹了關(guān)于.net core項(xiàng)目中常用的幾款類庫的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.net core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04
Coolite Cool Study 3 MVC + Coolite 的實(shí)現(xiàn)代碼
啊,開始以為MVC+Coolite結(jié)合的例子沒什么難度,但原來Coolite在MVC中需要特定設(shè)置一下某些屬性才行,費(fèi)了兩個(gè)小時(shí)才算大功告成,具體請(qǐng)看下文。還是先把這個(gè)例子的效果貼上來再說。2009-05-05
asp.net Server.MapPath方法注意事項(xiàng)
當(dāng)我發(fā)布之后,對(duì)存儲(chǔ)圖片的文件夾創(chuàng)建了虛擬目錄,并賦予該目錄寫入的權(quán)限,但是,當(dāng)我上傳圖片的時(shí)候,總是失敗。以前沒遇到過這種情況,覺得很是怪異,所以想盡辦法去解決。2008-09-09
asp.net 大文件上傳 之 改版了的SlickUpload.HttpUploadModule(Krystalware
以下代碼中所注釋的部分是所改版的地方。:) Krystalware.SlickUpload.dll2009-05-05

