ASP.NET MVC4+EF4.1系列之二實體Code First

來源:互聯網
上載者:User

前面我們已經能簡單的建立起MVC4項目了,接下來在項目中添加一個類庫,這個類庫是用來建EF用的,它承擔著MVC中Model層的作用。首先添加"ADO.NET實體資料模型",(我用的是簡體中文版)雖然建立很簡單但是照顧初學者就做了。

這樣就完成了EF的建立

在前一篇已經說過通過一個小小的Demo去開始Code First。通過這個小例子進行簡單的CRUD,首先開始建立實體。

一、建立實體

我很喜歡EF的圖形化設計領域結構,實體設計如:

很容易的看出來學生和成績記錄以下稱成績單和學生是1對多的關係,一個學生可以有多個成績記錄,因為每個課程都會有一個成績記錄,一個課程也可以有多次記錄,所以我們不難發現學生和課程是一個多對多的關係,一個學生有對個課程,當然一個課程也可以同屬於多個學生。

二、寫實體

關係已經理清,我們就要去寫這些實體。也許用過EF的大俠們都知道EF只要你將實體設計好,後台會自動產生類。但是在這裡我不這樣做,我不讓它自動產生,我將EF的屬性,代碼建置原則改成“無”,如所示:

大家注意畫了紅線的部分這樣EF就不會在後台自動給我們產生代碼了。那麼大家會好奇,那我是不是要手動去寫這些類和關係映射。答案是"NO"。這就是微軟的強大了。我們用T4模板產生顯示的實體代碼。首先添加代碼產生項

在這裡選中ADO.NET DbContext Generrator,也就是圖上畫紅線的選項,大家也許記得我在前面說我我們要用到EF4.1的一些新特性。這裡開始體現了。經過以操作實體已經產生。
學生的實體:

namespace MVC4School.Model{    using System;    using System.Collections.Generic;        public partial class Student    {        public Student()        {            this.Performance = new HashSet<Performance>();        }            public System.Guid ID { get; set; }        public string FirstName { get; set; }        public string LastName { get; set; }        public string StudentNum { get; set; }        public System.DateTime CreateAt { get; set; }        public string RecordTime { get; set; }            public virtual ICollection<Performance> Performance { get; set; }    }}

 你很容易看到其中成績記錄屬性被virtual修飾,說明是消極式載入,這提高了效能,在EF中這個virtual不是必須的,不用visual在引用的是後也不會報錯只是為null,也許瞭解nhibernate的同志知道這個在nhibernate中是必須的沒有是會報錯的。

成績記錄的實體代碼如下:

namespace MVC4School.Model{    using System;    using System.Collections.Generic;        public partial class Performance    {        public System.Guid ID { get; set; }        public string Score { get; set; }        public string CreatAt { get; set; }            public virtual Student Student { get; set; }        public virtual Course Course { get; set; }    }}

 課程實體代碼如下:

namespace MVC4School.Model{    using System;    using System.Collections.Generic;        public partial class Course    {        public Course()        {            this.Performance = new HashSet<Performance>();        }            public System.Guid ID { get; set; }        public string Name { get; set; }        public string CreatAt { get; set; }            public virtual ICollection<Performance> Performance { get; set; }    }}

 這樣這三個實體的代碼都完整的展現在我們的面前,但事實我們不用寫一行代碼,是不是很方便呢?(不要說我懶,有快捷的方式我為什麼不用呢?)

三、creating the  Database Context

這個類主要將上面建立的類包含在其中,住要是指哪些實體包含在資料模型中,同時這個類指定我們建立的實體的映射關係,另一方面指定一些約束。

自動產生的程式碼如下:

View Code

 1 namespace MVC4School.Model 2 { 3     using System; 4     using System.Data.Entity; 5     using System.Data.Entity.Infrastructure; 6      7     public partial class SchoolModelContainer : DbContext 8     { 9         public SchoolModelContainer()10             : base("name=SchoolModelContainer")11         {12         }13     14         protected override void OnModelCreating(DbModelBuilder modelBuilder)15         {16             throw new UnintentionalCodeFirstException();17         }18     19         public DbSet<Student> Students { get; set; }20         public DbSet<Course> Courses { get; set; }21         public DbSet<Performance> Performances { get; set; }22     }23 }

這裡我給一些簡單的解說

        public SchoolModelContainer()            : base("name=SchoolModelContainer")        {        }

 "name=SchoolModelConter"這個指定了連接字串,這個連接字串在App.config設定檔中,你開啟這個檔案會看到這樣一段代碼:

<?xml version="1.0" encoding="utf-8"?><configuration>  <connectionStrings>    <add name="SchoolModelContainer" connectionString="metadata=res://*/SchoolModel.csdl|res://*/SchoolModel.ssdl|res://*/SchoolModel.msl;provider=System.Data.SqlClient;provider connection string='data source=.\SQLEXPRESS;attachdbfilename="C:\Documents and Settings\Administrator.9682B89E07F644F\My Documents\SchoolModel.mdf";integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />  </connectionStrings></configuration>

 這段連接字串指定了資料庫類型和連接字串,忘了和大家說了,EF支援大部分流行資料庫的。

這樣T4模板為我們做了所有的代碼編寫工作。下一節我給大家展示資料初始化和基本的CRUD。

未完待續……

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.