今天學習了ORM中的Entity FrearmeWork框架,其實之前看到orm框架,感覺好高大上啊,還沒准備去了解它那,今天我們就學習了這個,其實Entity FrearmeWork框架和Nhibernate實現ORM的兩套方案,一是用於系統與數據庫之間的操作交互和實體類與SQL語句之間的轉換。另一個為ORM自動生成工具,用於實體類,前台HTML代碼,業務邏輯調用代碼的自動生成。但是我們目前僅僅學習了Entity FrearmeWork框架,下面就簡單的總結一下它的建構。
一.從數據庫映射C#項目
添加一個ADO.NET實體數據模型,然后我們根據向導添加完成。
下面來看下他們的內容,需要注意的有四部分,我們需要注意兩部分,分別為StudentContext.cs和Register.cs,Student.cs,在這里說一下連接的境像:
在這里我么可以看到StudentEntities繼承了DbContext的連接,而DbContext存在一個方法連接我們的數據庫,參數中存在一個屬性ConnectionString,關系就是這樣的。
這里就是一個自動映射成的實體類,和數據庫中的字段是一樣的。
二.現在C#中創建實體,然后映射到數據庫
仍然不變的使我們要添加一個ADO.NET實體數據模型,然后建立一個空模型即可,然后添加實體,設置關系以及屬性的類型,最后選擇根據模型生成數據庫,最重要的是需要執行一個“執行”即可,這個是不能忘記的,然后我們即可把C#中的實體映射到我們的數據庫中。
在這里,我們可以好奇為什么它們沒有關系怎么可以映射那,其實還是創建了SQL語句,上面就是在User.edmx.sql中查找到的,嘿嘿,所以還不是很神奇的。被我們發現啦。在這里需要區別的是我們從數據庫映射時間創建的是StudentEntities,而從C#映射到數據庫創建的是UserContainer,就是Entities與Container的不同,另外在創建C#映射到數據庫還創建了一個.edmx.sql,這些都是我們可以區分的地方,這就是我們創建的EF模型。
三.EF中增刪改查的語句:
static void Main(string[] args) { StudentEntities entities = new StudentEntities(); //初始化對象 Register register = new Register(); #region 增加 //register.UserName = "張三"; //register.Pwd = "123"; //register.Sex = "男"; //register.Phone = "123456"; //register.Age = "20"; //register.Address = "河南鄭州"; //entities.Register.Add(register); //添加一個集合使用Add //entities.SaveChanges(); //保存 #endregion #region 刪除 //Register r = entities.Register.Where(i=>i.Id==39).SingleOrDefault(); //在這里需要注意的是Lambda表達式的i屬性Register,它是一個集合,所以需要它.出來他的id項 //entities.Register.Remove(r); //刪除使用的是Remove //entities.SaveChanges(); #endregion #region 修改 //Register rr = entities.Register.Where(i => i.Id == 40).SingleOrDefault(); //修改時間記得先查詢要修改的條件 //rr.UserName = "zhangsan"; //在這里需要注意的是接受的對象 //rr.Pwd = "456"; //rr.Sex = "女"; //rr.Phone = "123456789"; //rr.Age = "20"; //rr.Address = "北京"; //entities.SaveChanges(); //保存 #endregion #region 查詢 //Register rrr = entities.Register.Where(i => i.Id == 41).SingleOrDefault(); //Console.WriteLine("{0},{1},{2}",rrr.Id,rrr.UserName,rrr.Pwd); //Register rrr = entities.Register.SelectMany(i=>i.Id==40&&i.Id==41).SelectMany(); #endregion Console.WriteLine("ok"); Console.ReadKey(); }
嘿嘿,這就是我們在EF模型中對數據庫操作的語句,需要注意的是,我們在執行完后記得保存一下數據,就是當前狀態記得保存,這個是容易忘記的,另外在這里參數為Lambda表達式時間要准確使用。
四.實體中存在約束執行的語句
static void Main(string[] args) { UserContainer container = new UserContainer(); Tea t = new Tea(); //t.ID = 1; t.Name = "lisi"; t.Pwd = "123456"; t.Sid = 1; Stu stu = new Stu(); //stu.ID = 1; stu.Name = "zhangsan"; stu.Pwd = "123"; container.Tea.Add(t); container.Stu.Add(stu); container.SaveChanges(); Console.WriteLine("ok"); Console.ReadKey(); }
存在外鍵關系的我們需要注意的是,當我們在添加一個表的數據時,另外一個外鍵的屬性也需啊喲賦值,如果我們設置Id的屬性為自動增長,那么我們設置的外鍵的值則每次自動增長,如果設置不變,則只需要不填寫即可。
其實這個EF模型的總結我感覺我們學習的不多,但是不知道從哪開始總結,也向更深入的了解一下,接下來還是自己查找吧,好啦,就寫到這里,嘿嘿。