最近面試時很多面試官都問到了EF框架 好記性不如爛筆頭 趕緊記下來 code-first是EF框架中的一種,是使用實體類來進行資料庫表的映射,所以實體類中的欄位要規範(我認為) 比如: 如果有外鍵的話 一定要搞清楚一對多、多對一和多對多的關係 比如一個用戶對應一個用戶詳細信息可以寫成這樣: 用戶詳細 ...
最近面試時很多面試官都問到了EF框架 好記性不如爛筆頭
趕緊記下來
code-first是EF框架中的一種,是使用實體類來進行資料庫表的映射,所以實體類中的欄位要規範(我認為) 比如:
如果有外鍵的話 一定要搞清楚一對多、多對一和多對多的關係
比如一個用戶對應一個用戶詳細信息可以寫成這樣:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace QQManager.Models { public class User { public Guid Id { get; set; } public string Name { get; set; } public virtual UserInfo UserInfo { get; set; } } }
用戶詳細信息表:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace QQManager.Models { public class User { public Guid Id { get; set; } public string Name { get; set; } public virtual UserInfo UserInfo { get; set; } } }
如果是一對多要搞清楚他們之間的關係(誰包含誰),比如一個訂單中包含多個商品
訂單表:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace QQManager.Models { public class Orders { public Guid Id { get; set; } public virtual List<Gooder> Gooder { get; set; } } }
商品表:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace QQManager.Models { public class Gooder { public Guid Id { get; set; } //商品名稱 public int Name { get; set; } //商品價格 public int Price { get; set; } public virtual Orders Orders { get; set; } } }
在Code-first中一個很重要的東西就是數據上下文 在這裡不做介紹...因為我也搞不太懂,可以搜一下大佬的文章,順便分享給我:)
數據上下文的主要構成
using System; using System.Collections.Generic; // DbContext using System.Data.Entity; namespace QQManager.Models { /// <summary> /// 資料庫上下文 /// </summary> public class QQContext:DbContext { public QQContext() : base("name=qq")//web.config中連接字元串的名稱 { // 當 模型發生變化時 重新創建資料庫。 Database.SetInitializer(new DropCreateDatabaseIfModelChanges<QQContext>()); } //數據表,只要是模型類就要寫進來 public virtual DbSet<Order> Orders { get; set; } } }
對了,對於這種外鍵關係的欄位,使用virtual關鍵字修飾最好。1是延時載入,2是。。算了 想知道還是搜最好~~
具體的關於操作資料庫的語法轉載:https://blog.csdn.net/u013924731/article/details/53331610
這樣在mvc架構中就可以使用code-first了,主要是其他架構我沒使用過.....
順便一提的是這樣寫唯一的麻煩就是在使用時每次都要實例化上下文,所以在我上學時 老師叫我們的一個簡單的辦法:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Web; using System.Web.Mvc; using QQManager.Models; namespace QQManager.Controllers { public class BaseController : Controller { protected QQContext db { get { // 從當前線程中獲取上下文數據。 QQContext _db = CallContext.GetData("qq") as QQContext; if (_db == null) { _db = new QQContext(); _db.Database.CreateIfNotExists(); } // 將上下文數據保存到當前線程中。 CallContext.SetData("qq",_db); return _db; } } } }View Code
這樣只要繼承此類就可以直接使用上下文,名稱為自定義,這裡是db(開頭大寫,這裡不規範)。
以上是我自己對這套框架的理解,多多指教。