EF CodeFirst 如何通過配置自動創建數據庫當模型改變時

? ?最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。

???十年河東十年河西,莫欺少年窮

???學無止境,精益求精

? ?本篇為進階篇,也是彌補自己之前沒搞明白的地方,慚愧慚愧。

? ?如有不明白,請參考:EF CodeFirst 創建數據庫?及?EF CodeFirst增刪改查之‘CRUD’

? ?話不多說,直接上代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;namespace EF_Test.DAL
{public class StudentInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<StudentContext>{protected override void Seed(StudentContext context){//添加學生var studentList = new List<Student>{new Student{Name = "陳依依", Sex = "", StudentNum = "081309201"},new Student{Name = "戚永景", Sex = "", StudentNum = "081309202"},new Student{Name = "劉華麗", Sex = "", StudentNum = "081309203"},new Student{Name = "薛正欽", Sex = "", StudentNum = "081309204"},new Student{Name = "王松濤", Sex = "", StudentNum = "081309205"},new Student{Name = "王自龍", Sex = "", StudentNum = "081309206"},new Student{Name = "高其峰", Sex = "", StudentNum = "081309207"},new Student{Name = "陳欣欣", Sex = "", StudentNum = "081309208"},new Student{Name = "陳麗陽", Sex = "", StudentNum = "081309209"}};studentList.ForEach(s => context.Students.Add(s));context.SaveChanges();//添加課程var courseList = new List<Course>{new Course{ Name="數據結構"},new Course{ Name="計算機原理"},new Course{ Name="網絡技術"}};courseList.ForEach(s => context.Courses.Add(s));context.SaveChanges();//添加分數var scoreList = new List<Score>(){new Score{ StudentID=1,CourseID=1,StudentScore=90},new Score{ StudentID=2,CourseID=1,StudentScore=91},new Score{ StudentID=3,CourseID=1,StudentScore=92},new Score{ StudentID=4,CourseID=1,StudentScore=93},new Score{ StudentID=5,CourseID=1,StudentScore=94},new Score{ StudentID=6,CourseID=1,StudentScore=95},new Score{ StudentID=7,CourseID=1,StudentScore=96},new Score{ StudentID=8,CourseID=1,StudentScore=97},new Score{ StudentID=9,CourseID=1,StudentScore=98}};scoreList.ForEach(s => context.Scores.Add(s));context.SaveChanges();}}
}

?

? ?模型類如下:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Web;namespace EF_Test.DAL
{public class Student{[Key]public int Id { get; set; }[Required][StringLength(10)]public string Name { get; set; }//姓名[StringLength(2)]public string Sex { get; set; }//性別[StringLength(20)]public string StudentNum { get; set; }//學號
    }public class Course{[Key]public int Id { get; set; }[Required][StringLength(20)]public string Name { get; set; }//課程名稱
    }public class Score{[Key]public int Id { get; set; }public int StudentScore { get; set; }//學生分數public int StudentID { get; set; }//學生IDpublic int CourseID { get; set; }//課程IDpublic virtual Student Student { get; set; }//virtual關鍵字修飾,用于延遲加載 提高性能 只有顯式調用時  屬性==對象public virtual Course Course { get; set; }//virtual關鍵字修飾,用于延遲加載 提高性能 只有顯式調用時  屬性==對象
    }public class StudentContext : DbContext{public StudentContext(): base("StudentContext")//指定連接字符串
        {}public DbSet<Student> Students { get; set; }public DbSet<Course> Courses { get; set; }public DbSet<Score> Scores { get; set; }/// <summary>/// OnModelCreating方法中的modelBuilder.Conventions.Remove語句禁止表名稱正在多元化。如果你不這樣做,所生成的表將命名為Students、Courses和Enrollments。相反,表名稱將是Student、Course和Enrollment。開發商不同意關于表名稱應該多數。本教程使用的是單數形式,但重要的一點是,您可以選擇哪個你更喜歡通過包括或省略這行代碼的形式。/// </summary>/// <param name="modelBuilder"></param>protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();}}
}

? ?OK,截止到這兒,您可能會問我,protected override void Seed()這個重寫的方法什么時間執行呢?

? ?在此,需要兩點要求

? ?1、在web.config中<entityFramework>接點下加入如下配置:

    <contexts><context type="EF_Test.DAL.StudentContext, EF_Test"><databaseInitializer type="EF_Test.DAL.StudentInitializer, EF_Test" /></context></contexts>

? ?根據上述類文件,我們應該明白EF_Test是個命名空間,EF_Test.DAL.StudentContext是數據庫上下文,EF_Test.DAL.StudentInitializer是初始化類

? ?2、加上了上述配置,還需模型結構發生改變時,程序才會自動執行Seed()方法,例如:將字段長度由50改為20

? ?綜上所述條件滿足后,程序就會自動重新刪除數據庫并建立

? ?@陳臥龍的博客

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457458.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對AutoIt中控件和窗口的理解

經過嘗試&#xff0c;對AutoIt中Control和Window有了新的認識&#xff0c;分享一下 1.Control 現在我想對一個WinForm架構的應用程序進行自動化操作&#xff0c;得到控件Advanced Mode屬性為[Name:XXX]。 然而在該窗口中有多個相同屬性的Control&#xff0c;而依該屬性只能操作…

【設計模式 01】簡單工廠模式(Simple factory pattern)

簡單工廠模式 可以根據參數的不同返回不同類的實例 參考&#xff1a; CSDN|簡單工廠模式 簡單工廠通過傳給工廠類的參數的不同&#xff0c;返回不同的對象&#xff0c;包括三部分組成&#xff1a; 具體的”產品“工廠類&#xff08;實例化并返回”產品“&#xff09;客戶端&am…

[Hadoop]MapReduce多路徑輸入與多個輸入

1. 多路徑輸入 FileInputFormat是所有使用文件作為其數據源的 InputFormat 實現的基類&#xff0c;它的主要作用是指出作業的輸入文件位置。因為作業的輸入被設定為一組路徑&#xff0c; 這對指定作業輸入提供了很強的靈活性。FileInputFormat 提供了四種靜態方法來設定 Job 的…

pvrect r語言 聚類_R語言實現KEGG通路富集可視化

用過KEGG的朋友應該都很熟悉里面的通路地圖。你是否想過如果自己可以控制通路圖將自己的基因繪制在一個通路圖中&#xff0c;那么今天給大家介紹一個新推出的Bioconductor軟件包pathview。這個包可以進行KEGG富集分析。首先&#xff0c;我們不耐煩的介紹下Bioconductor包的安裝…

【設計模式 02】策略模式( Strategy)

策略模式 參考&#xff1a; CSDN | 策略模式百家號 | 策略模式 如果某個系統需要不同的算法&#xff08;如超市收銀的優惠算法&#xff09;&#xff0c;那么可以把這些算法獨立出來&#xff0c;使之之間可以相互替換&#xff0c;這種模式叫做策略模式&#xff0c;它同樣具有三個…

PL/SQL復合變量

復合變量可以將不同數據類型的多個值存儲在一個單元中。由于復合類型可以由用戶自己根據需要定義其結構&#xff0c;所以復合數據類型也稱為自定義數據類型。在PL/SQL中&#xff0c;使用%TYPE聲明的變量類型與數據表中字段的數據類型相同&#xff0c;當數據表中字段數據類型修改…

Android中使用am命令實現在命令行啟動程序詳解

在Android中&#xff0c;除了從界面上啟動程序之外&#xff0c;還可以從命令行啟動程序&#xff0c;使用的是命令行工具am. 復制代碼代碼如下:usage: am [subcommand] [options] start an Activity: am start [-D] -D: enable debugging send a broadcast Intent: am br…

用Visual Studio 2019連接 WSL來編譯調試C/C++項目

因為有作業要在Linux環境下寫&#xff0c;用虛擬機直接卡成PPT&#xff0c;VS code又不會調試&#xff0c;就搞一下VS 2019吧。 環境 windows 10 WSL(Ubuntu 18.04.4) Visual Studio Community 2019 Linux 里要有C/C環境&#xff08;gcc等&#xff09;VS要有 適用于 Linux…

node.js Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服務平臺&#xff0c;使用它的API可以輕松搞定實時推送&#xff01;個人感覺goeasy推送更穩定&#xff0c;推送速度快&#xff0c;代碼簡單易懂上手快瀏覽器兼容性&#xff1a;GoEasy推送支持websocket 和polling兩種連接方式&#xff0c;從而可以支…

git 移動分支指針_理解git 中的HEAD指針branch指針

HEAD指針使用git checkout 來移動HEAD指針&#xff0c;移動的對象可以是分支指針也可以是快照。HEAD指針可以指向快照也可以指向branch。當指向branch時提交后會和branch指針一起向后移動&#xff0c;當不指向branch提交時時則會在一個detached狀態。分支(branch)指針使用git b…

應用程序域

好文鏈接 使用.NET建立的可執行程序 .exe&#xff0c;并沒有直接承載到進程當中&#xff0c;而是承載到應用程序域&#xff08;AppDomain&#xff09;當中。應用程序域是.NET引入的一個新概念&#xff0c;它比進程所占用的資源要少&#xff0c;可以被看作是一個輕量級的進程。 …

【設計模式 03】裝飾模式——俄羅斯套娃?

裝飾模式(俄羅斯套娃&#xff1f;) 裝飾模式&#xff1a;動態的給某些對象添加額外的功能 參考&#xff1a; 簡書 | 裝飾模式 博客園 | 簡說設計模式——裝飾模式 博客園 | 裝飾器模式 Decorator 結構型 設計模式 (十) 什么是裝飾模式 裝飾模式也叫裝飾器模式&#xff0c;p…

系統移植的四大步驟

最近在學習系統移植的相關知識&#xff0c;在學習和調試過程中&#xff0c;發現了很多問題&#xff0c;也解決了很多問題&#xff0c;但總是對于我們的開發結果有一種莫名其妙的感覺&#xff0c;糾其原因&#xff0c;主要對于我們的開發環境沒有一個深刻的認識&#xff0c;有時…

bem什么意思_bem是什么意思_bem的翻譯_音標_讀音_用法_例句_愛詞霸在線詞典

全部Methods Three different concentrations of the n - butanol extract of MOH ( BEM ) : 0.038 g L ~ ( - 1 ), 0.11 g L ~ ( - 1 ) and 0.34 g L ~ ( - 1 ) were prepared.巴戟天醇提取物 ( BEM ) 配成含生藥0.038gL~ ( -1)、0.11gL~ ( -1 ) 、 0.34gL~ ( -1 ) 三種濃度…

display:flex

flex&#xff1a;彈性布局 常用屬性介紹&#xff1a; flex-direction: column &#xff08;設置主容器主軸方向&#xff09; flex-flow: row wrap &#xff08;第一個參數為flex-direction&#xff0c;第二個為flex-wrap&#xff09; align-items: flex-start &#xff08;設…

Linux(Ubuntu 19.10)下 Qt5 連接 MySQL(QMYSQL driver not loaded)

Linux&#xff08;Ubuntu 19.10&#xff09;下 Qt5 連接 MySQL 安裝好 MySQL 和 Qt Qt 連接 MySQL 的代碼 QSqlDatabase dQSqlDatabase::addDatabase("QMYSQL");//加載mysql驅動&#xff0c;這個字符串是固定的 d.setHostName("127.0.0.1"); d.setDatabas…

華為消息推送 有透傳通道嗎_求解在推送用透傳消息-使用廠商通道(我用的是基座測試) 用手機測試出現了“clientId離線”問題...

// #ifdef APP-PLUS// uni.showModal({// title: 提示,// content: 您的用戶在其它的app登錄&#xff0c;如果有問題&#xff0c;請修改密碼或重新登錄&#xff01;,// cancelText:"修改密碼",// confirmText:"好的",// success: function (res) {// if (r…

oneuijs/You-Dont-Need-jQuery

oneuijs/You-Dont-Need-jQuery https://github.com/oneuijs/You-Dont-Need-jQuery/blob/master/README.zh-CN.mdYou Dont Need jQuery 前端發展很快&#xff0c;現代瀏覽器原生 API 已經足夠好用。我們并不需要為了操作 DOM、Event 等再學習一下 jQuery 的 API。同時由于 React…

Wpf 數據綁定簡介、實例1

簡介&#xff1a;1.WPF綁定使用的源屬性必須是依賴項屬性&#xff0c;這是因為依賴項屬性具有內置的更改通知支持&#xff0c;元素綁定表達式使用了Xaml擴展標記&#xff0c; WPF綁定一個控件是使用Binding.ElementName, 綁定非控件對象時使用Source,RelativeSource,DataContex…

【設計模式 04】代理模式

代理模式 代理模式( Proxy)&#xff1a;為其他對象提供一種代理以控制對這個對象的訪問。 參考&#xff1a;refactoringguru | proxy 什么是代理模式 有時候如果想要訪問某個對象&#xff0c;但又沒辦法直接訪問或不方便直接訪問&#xff0c;可以使用代理模式&#xff0c;代理…