.Net EntityFramwork6.0 EF框架開發入門 ...
一、環境 開發環境:Sqlserver2008 R2、Visual Studio2012 二、準備工作 1、新建MVC空項目 2、通過NuGet獲取 EntityFramework 包 操作截圖:
![](https://images2017.cnblogs.com/blog/125961/201802/125961-20180209155402857-1606333684.png)
![](https://images2017.cnblogs.com/blog/125961/201802/125961-20180209155445560-1982934310.png)
[Table("User")] public class User { [Display(Name="id")] public int Id {get;set;} [Display(Name="UserName")] [Required(ErrorMessage="用戶名必填")] public string UserName { get; set; } [Display(Name="Password")] public string Password { get; set; } }
2.構建資料庫訪問類 a)、繼承DbContext b)、創建資料庫連接字元串,字元串名稱與a)步驟類名稱一致,也可不一致(需指定資料庫訪問串)
public class DemoConnectionContext : DbContext { public DbSet<User> dbuser { get { return Set<User>(); } } public DemoConnectionContext() : base("name=DemoConnectionContext") //指定資料庫訪問串 { } static DemoConnectionContext() { Database.SetInitializer<DemoConnectionContext>(new DropCreateDatabaseIfModelChanges<DemoConnectionContext>()); } }
3.資料庫操作
//聲明資料庫操作類
DemoConnectionContext db = new DemoConnectionContext();
a)、增加數據
User user = new Models.User{UserName = "jay", Password = "123"}; db.dbuser.Add(user); db.SaveChanges();
b)、查詢數據
//指定ID查詢 var userObj=db.dbuser.Find(1); //寫法一 var userObj = db.dbuser.Where(u => u.Id == 1).FirstOrDefault(); //寫法二 //寫法三 var userObj = (from u in db.dbuser where u.Id == 1 select u).ToList();
c)、更新數據
//更新表 var userObj = (from u in db.dbuser where u.UserName == "jay" select u).ToList(); userObj[0].Password = "1234"; db.dbuser.Attach(userObj[0]); //更新指定列 var setEntry = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager.GetObjectStateEntry(userObj[0]); setEntry.SetModifiedProperty("Password"); db.SaveChanges();
d)、刪除數據
//刪除數據 指定ID即可 User userObj = new User { Id = 1 }; db.dbuser.Attach(userObj);//附加對象 db.dbuser.Remove(userObj);//刪除對象 db.SaveChanges();
e)、事物操作 多表操作,操作放在 TransactionScope
try { //事物 多表操作,操作放在 TransactionScope using (var trac = new TransactionScope()) { User user = new User { UserName = "jack", Password = "1234" }; db.dbuser.Add(user); //throw new Exception("拋出異常"); user = new User { UserName = "David", Password = "1234" }; db.dbuser.Add(user); db.SaveChanges(); trac.Complete();//事物提交,如未執行該方法,出事務作用範圍自動回滾 } } catch (Exception ex) { throw; }
f:)、T-SQL查詢
1) sql 查詢,實體類
//sql 查詢,實體類 var userList = db.Database.SqlQuery<User>("select id,UserName,Password from [User]").ToList();
2)指定對象查詢實體
var userList= db.dbuser.SqlQuery("select id,UserName,Password from [User]").ToList();
3) 執行SQL命令
db.Database.ExecuteSqlCommand("update [User] set UserName='Michel' where UserName='jay'");
常見錯誤解答 1、錯誤信息:The model backing the 'DemoConnectionContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). 錯誤信息大體意思為:因實體類屬性或實體關係、實體名稱發生變化,EF腳本需重新更新資料庫信息與實體保持一致。 解決方法:1.備份資料庫,關閉所有資料庫操作,EF框架自動更新腳本(通常刪除庫後重新創建庫,如果資料庫已經在使用,並且不想刪除現有數據,不建議使用運行腳本) 2.指定不同步更新資料庫,可設置為 Database.SetInitializer<DemoConnectionContext>(null);,手動更新資料庫與實體類保持一致