Entity Framework CodeFirst尝试
前言
Code First模式我們稱之為“代碼優(yōu)先”模式,是從EF4.1開始新建加入的功能。使用Code First模式進行EF開發(fā)時開發(fā)人員只需要編寫對應(yīng)的數(shù)據(jù)類(其實就是領(lǐng)域模型的實現(xiàn)過程),然后自動生成數(shù)據(jù)庫。這樣設(shè)計的好處在于我們可以針對概念模型進行所有數(shù)據(jù)操作而不必關(guān)系數(shù)據(jù)的存儲關(guān)系,使我們可以更加自然的采用面向?qū)ο蟮姆绞竭M行面向數(shù)據(jù)的應(yīng)用程序開發(fā)。
從某種角度來看,其實“Code First”和“Model First”區(qū)別并不是太明顯,只是它不借助于實體數(shù)據(jù)模型設(shè)計器,而是直接通過編碼(數(shù)據(jù)類)方式設(shè)計實體模型(這也是為什么最開始“Code First”被叫做“Code Only”的原因)。但是對于EF它的處理過程有所差別,例如我們使用Code First就不再需要EDM文件,所有的映射通過“數(shù)據(jù)注釋”和“fluent API”進行映射和配置。另外需要注意的是“Code First”并不代表一定就必須通過數(shù)據(jù)類來定義模型,事實上也可以通過現(xiàn)有數(shù)據(jù)庫生成數(shù)據(jù)類。
Code First 簡單使用演示
第一步:還是添加一個控制臺應(yīng)用程序,然后在此項目中添加兩個簡單的實體類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace CodeFirstTest {public class OrderDetail{public int ID { get; set; }public string Product { get; set; }public int OrderID { get; set; }public virtual Order Order { get; set; }} } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace CodeFirstTest {public class Order{public int ID { get; set; }public string Customer { get; set; }public DateTime OrderDate { get; set; }public virtual List<OrderDetail> OrderDetails { get; set; }} }有了這兩個類之后讓我們定義一個數(shù)據(jù)庫上下文,有了它我們就可以對數(shù)據(jù)進行增刪改查操作了,這個類必須繼承于"System.Data.Entity.DbContext”類以賦予它數(shù)據(jù)操作能力。因此接下來我們需要給這個應(yīng)用安裝EntityFramework包,因為到目前為止我們并沒有引入EF框架相關(guān)的任何內(nèi)容,我們需要引入EF相關(guān)程序集。但是我們有更好的選擇那就是NuGet。通過NuGet進行在線安裝:項目中右鍵選擇"Manage NuGet Packages…”;選擇Online;再選擇“EntityFramework”;然后點擊安裝即可。不了解NuGet的朋友到這里看一下使用 NuGet 管理項目庫。
數(shù)據(jù)庫上下文操作類:
namespace CodeFirstTest {public class OrderTestContext:DbContext{public DbSet<Order> Orders { get;set;}public DbSet<OrderDetail> OrderDetails { get; set; }} }代碼調(diào)用實例
?
static void Main(string[] args){using (var db = new OrderTestContext()){Order Order = new Order();Order.Customer = "aehyok";Order.OrderDate = DateTime.Now;db.Orders.Add(Order);db.SaveChanges();IQueryable<Order> Orders = from Orderes in db.Ordersselect Orderes;foreach (Order O in Orders){Console.WriteLine("OrderID is {0},Customer is {1}", O.ID, O.Customer);}}Console.ReadLine();}?調(diào)用效果
?
生成的數(shù)據(jù)庫在這里,在此我們可以發(fā)現(xiàn)針對數(shù)據(jù)庫,我們沒有做任何的處理,沒有建數(shù)據(jù)庫,也沒有進行配置,當(dāng)然它應(yīng)該會有默認(rèn)的配置。
接下來我們來看一下,如何來配置。
我們可以在App的配置文件里添加一個數(shù)據(jù)庫的鏈接字符串
<?xml version="1.0" encoding="utf-8"?> <configuration><configSections><!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --><section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /></configSections><connectionStrings><add name="CodeFirstTest" connectionString="Data Source=.;Database=CodeFirstTest;UID=sa;PWD=sa123;" providerName="System.Data.SqlClient"></add></connectionStrings><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><entityFramework><defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"><parameters><parameter value="v11.0" /></parameters></defaultConnectionFactory></entityFramework> </configuration>?里面主要添加了一個數(shù)據(jù)庫鏈接字符串
針對數(shù)據(jù)庫上下文操作類的更改
public class OrderTestContext:DbContext{public OrderTestContext(string connectionName): base(connectionName){}public DbSet<Order> Orders { get;set;}public DbSet<OrderDetail> OrderDetails { get; set; }}?主要是添加了一個構(gòu)造函數(shù)帶有一個參數(shù)的。然后在調(diào)用上也有所調(diào)整。
using (var db = new OrderTestContext("CodeFirstTest")){Order Order = new Order();Order.Customer = "aehyok";Order.OrderDate = DateTime.Now;db.Orders.Add(Order);db.SaveChanges();IQueryable<Order> Orders = from Orderes in db.Ordersselect Orderes;foreach (Order O in Orders){Console.WriteLine("OrderID is {0},Customer is {1}", O.ID, O.Customer);}}?主要是針對實例化數(shù)據(jù)庫操作上下文的
調(diào)用結(jié)果也是
同時打開Sql Server 發(fā)現(xiàn)也有了剛剛在配置文件中配置的那個數(shù)據(jù)庫
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/aehyok/p/3323496.html
總結(jié)
以上是生活随笔為你收集整理的Entity Framework CodeFirst尝试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。