日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

EF CodeFirst 如何通过配置自动创建数据库当模型改变时

發布時間:2023/12/19 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

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

? ?@陳臥龍的博客

?

總結

以上是生活随笔為你收集整理的EF CodeFirst 如何通过配置自动创建数据库当模型改变时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。