創建實體數據模型:
本文將帶你創建實體數據模型(EDM)SchoolDB數據庫和理解基礎建設模塊。
實體數據模型(EDM)是用於描述實體之間關系的一種模型,以下將使用Visual Studio 2012 和 EF6創建SchoolDB數據庫。
1.打開Visual Studio 2012並創建一個Console項目
項目->屬性,確保target framework 為 .NET Framework 4.5。
2.增加EDM文件,右鍵項目 -> 添加 選中ADO.NET Entity Data 並命名為'School'
3.隨後會出現EDM向導,有四個選項:EF Designer from database (數據庫優先功能),Empty EF Designer model(模型優先功能),Empty Code First model 和 Code First from database(代碼優先功能)。在本基礎教程中暫時只關注數據庫優先功能,所以選擇EF Designer from database 選項,並且點擊下一步。
4.你可以選擇已經存在的數據庫連接或者選擇新建一個連接。我們選擇已經存在的數據庫連接SchoolDB數據庫。這會將對應的連接字符串加入app.config文件,點擊下一步。
5.這一步我們需要選擇EF的版本,這裡我們選擇EF6.0
注意:如果你已經安裝了EF的最新環境,這一步將不會出現。
6.這一步將顯示SchoolDB數據庫的所有表,視圖和存儲過程,選擇你想要建模的表,視圖,存儲過程。並且如果需要的話,可以修改命名空間。
注意:
Pluralize or singularize generated object names 選項 表示所創建的對象屬性會注意單復數形式。例如,如果SchoolDB數據庫中有一個表名為Students的表,它創建出來的實體集合(如DBSet<T>)中的泛型參數(T)會以單數形式創建。又例如表間關系存在一對多或多對多關系的,如Student與Course之間的多對多關系,在Student實體對象中將存在一個復數形式的屬性名“Courses”的集合對象。
第二個選項,Include foreign key columns in the model,將外鍵包含在模型中。例如Standard表和Student表存在一對多的關系,所以代表多個Student關聯一個Standard。在實體模型中Student將包含StandardId 這個標量屬性和Standard 這個導航屬性,如果沒有選中該項,則僅包含Standard 這個導航屬性,不包含StandardId 這個標量屬性。
第三個選項,Import selected stored procedures and functions into entity model,自動創建存儲過程和函數,這個選項通常是必須要的。
7.當點擊“Finish”鍵後,一個名為“School.edmx”的文件將出現在你的項目中。雙擊該文件將打開EDM設計器,它會顯示所有你剛剛選擇的表以及他們之間的關系。
EDM也會在config文件中為你添加好連接字符串
1 <?xml version="1.0"?> 2 <configuration> 3 <configSections> 4 <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 5 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> 6 </configSections> 7 <startup> 8 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> 9 </startup> 10 <entityFramework> 11 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/> 12 <providers> 13 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/> 14 </providers> 15 </entityFramework> 16 <connectionStrings> 17 <add name="SchoolDBEntities" connectionString="metadata=res://*/SchoolDB.csdl|res://*/SchoolDB.ssdl|res://*/SchoolDB.msl;provider=System.Data.SqlClient;provider connection string="data source=.\sqlexpress;initial catalog=SchoolDB;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient"/> 18 </connectionStrings> 19 </configuration>View Code
至此,你已經通過已有的數據庫創建出一個簡單的EDM模型了。
接下來我們將看看EDM (School.edmx)為我們創建了一些什麼文件。
實體表映射:
每一個實體對象都被映射到對應的數據表中,你可以右鍵點擊對應的實體對象並查看映射關系。當然,如果你在EDM設計器中修改了實體對象的屬性名字,表映射也會自動應用該變化。
上下文及實體類:
每一個實體對象模型都會創建一個上下文類(Context Class)還有若干個你選中的表所對應的實體類在EDM中,展開School.edmx變能看見。
School.Context.tt:
這是T4模板文件產生出來的上下文類。你可以展開.edmx文件開到它,其中會創建默認名為{數據庫名} + "Entities"的類。該類繼承DBContext類(該類在EF在定義,EF5.0前為ObjectContext類)
School.tt:
這是T4模板產生出來的實體對象類,下面代碼片段顯示了Student實體對象
public partial class Student { public Student() { this.Courses = new HashSet<Course>(); } public int StudentID { get; set; } public string StudentName { get; set; } public Nullable<int> StandardId { get; set; } public byte[] RowVersion { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } public virtual ICollection<Course> Courses { get; set; } }View Code
EDM Designer:
EDM設計器代表你的概念模型,它代表實體對象和他們之間的關系。起初,它看起來完全跟你的數據庫表結構一樣,但你可以從設計器中添加,合並和刪除一些你的應用程序不需要的字段。你甚至可以在這個模型中添加一個來自不同數據庫表的新對象到上下文菜單中,像上面一樣。記住無論做了什麼改動都應該將它映射至存儲模型中。所以你做改動時必須小心。
你可以通過XML的方式打開EDM設計器,這樣你將看到三部分,概念模式 (CSDL), 存儲模式 (SSDL) 和 映射表 (MSL) ,這三部分都在XML中。
右鍵點擊School.edmx,選擇打開方式。
選擇“XML (text) Editor”
Visual Studio 不能同時打開模型設計外觀和XML編輯器,所以你會看到一個讓你關閉模型設計外觀的窗口。點擊Yes將看到XML編輯器形式,然後你將看到以下界面。
你能看到SSDL, CSDL 和 C-S mapping 的內容,你可以展開這些內容進行浏覽。你並不需要直接編寫XML數據,因為你可以直接在模型中浏覽編輯。