ASP.NET沒有魔法——ASP.NET MVC 與資料庫之EF實體類與資料庫結構

來源:互聯網
上載者:User

標籤:build   creat   edit   無法   方式   post   string   rtm   mda   

  大家都知道在關係型資料庫中每張表的每個欄位都會有自己的屬性,如:資料類型、長度、是否為空白、主外鍵、索引以及表與表之間的關係。但對於C#編寫的類來說,它的屬性只有一個資料類型和類與類之間的關係,但是在My Blog中並沒有對它們之間進行過任何的配置,My Blog可以使用已有的資料庫運行,在後續為Post類型添加新屬性時,新屬性也能夠正確的添加到資料庫表中,以下是MySQL的資料庫表結構:

  

  其中IsPublish和ClickCount是後續通過EF Mirgations添加的。的表是直接通過EF根據Post類建立的,可以看出它們部分資料類型是不一樣的,自己建立的資料庫Title等欄位用的是varchar而EF建立的是longtext:

  

 關於EF code first約定 

  約定(Conventions)是一個在使用EF Code First時根據實體類型自動設定一個“概念性模型”的規則集合,這裡的“概念性模型”就可以理解為資料庫表模型。它們位於System.Data.Entity.ModelConfiguration.Conventions 命名空間。以下是一些常用的約定:
  ● 關於ID的約定(主鍵約定):類型中以ID命名的或者命名以ID結尾的,如ID或PostID。如果類型為數字或者GUID那麼將會被認為是Identity列。
  ● 關於類別關係的約定(表之間的外鍵約定):使用導覽屬性(既該屬性是另一個實體類型)來判斷類與類之間的一對一、一對多和多對多關係。

  以下是微軟文檔例子:

 1 public class Department  2 {  3     // 主鍵  4     public int DepartmentID { get; set; }  5     public string Name { get; set; }  6   7     // 導覽屬性  8     public virtual ICollection<Course> Courses { get; set; }  9 } 10  11 public class Course 12 { 13     // 主鍵 14     public int CourseID { get; set; } 15  16     public string Title { get; set; } 17     public int Credits { get; set; } 18  19     // 外鍵(主表主鍵名稱) 20     public int DepartmentID { get; set; } 21  22     // 導覽屬性 23     public virtual Department Department { get; set; } 24 }
View Code  

  在依賴的類型中建議添加一個外鍵屬性,以下幾種寫法會被認為是外鍵屬性(大小寫不敏感):
  ○ 導覽屬性名稱+主表主鍵名稱
  ○ 主類名稱+主鍵名稱
  ○ 主表主鍵名稱

  註:如果外鍵屬性是不可為空白類型,那麼EF會建立一個關聯刪除,當主鍵記錄被刪除時,關聯的外鍵記錄也會被刪除。
  如果“導覽屬性”的類型中不存在主鍵,那麼會被認為是一個複雜類型。
  更多參考文檔:
  https://msdn.microsoft.com/en-us/library/jj679962(v=vs.113).aspx
  https://msdn.microsoft.com/library/system.data.entity.modelconfiguration.conventions.aspx

通過Fluent API來修改屬性和關係

  除了預設的約定外還可以使用特性在對應的實體屬性上面標記和通過EF的Fluent API來進行配置實現關係、屬性的修改。
  本系列文章以Code First為主,所以對於實體與資料庫之間關係的映射也將使用代碼的方式通過Fluent API來介紹。
  Code First Fluent API一般是繼承DbContext並重寫OnModelCreating方法,在OnModelCreating方法中通過modelBuilder來配置對應的實體資訊:

  

  ● 添加主鍵:

  

  ● 設定列屬性:

  

  ● 建立索引(EF6.1版本支援)

    

  更多設定參考:https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
  使用Fluent API處理關係參考:https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx

使用資料特性標記修改屬性和關係

  除了使用Fluent API來修改實體與資料庫表的映射外,還可以使用資料特性標記的方式實現對類型與資料庫表之間的關係和欄位屬性,但是這樣做會對實體代碼有入侵,實體代碼應該是乾淨的與EF和資料庫屬性無關的。

  關於如何使用特性來修改屬性和關係可參考文檔:https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx

 

小結:
  本章介紹了實體與資料庫結構之間的關係如何處理,並對主要API進行了介紹,但由於目前My Blog中資料庫結構比較簡單無法完全示範,所以更多使用方法可以參考微軟文檔。

 

參考:

  https://msdn.microsoft.com/en-us/library/jj679962(v=vs.113).aspx
  https://msdn.microsoft.com/library/system.data.entity.modelconfiguration.conventions.aspx
  https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
  https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx

本文地址:http://www.cnblogs.com/selimsong/p/7656674.html

ASP.NET沒有魔法——目錄

ASP.NET沒有魔法——ASP.NET MVC 與資料庫之EF實體類與資料庫結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.