EF的增刪改查 創建上下文對象:WordBoradEntities db = new WordBoradEntities(); 一、添加: //1.1創建實體對象 User uObj = new User() { uName = "劉德華", uLoginName = "aaa", uPwd = " ...
EF的增刪改查
創建上下文對象:WordBoradEntities db = new WordBoradEntities();
一、添加:
//1.1創建實體對象
User uObj = new User()
{
uName = "劉德華",
uLoginName = "aaa",
uPwd = "asdfasdfasdfsadf",
uIsDel = false,
uAddtime = DateTime.Now
};
//1.2通過EF新增到資料庫
//1.2.1將對象加入到數據上下文的 User集合中
db.Users.Add(uObj);
//1.2.2調用數據上下文的保存方法,將對象存數資料庫
db.SaveChanges();
二、查詢:
1、單行 var userLogin = db.T_UserLogin.Where(d => d.LoginID == loginID).FirstOrDefault();
2、多行
1)var list = db.Users.Where(u => u.uName == "劉德華").ToList();
2)List<User> list = db.Users.Where(u => u.uName == "劉德華").ToList();
3、連接查詢:
1)linq連接查詢: from a in db.User join b in db. UsersAddresses on a.Id equals b.udid
2)EF連接查詢:IQueryable<UsersAddress> addrs = db.User.Include("UsersAddresses").Where(a => a.Id == 1);
3)另一種連接查詢:var list=db.User.Join(db. UsersAddresses,c=>c.Id,g=>g.udid,(c,g)=>new{Name=c.Name,GroupName=g.GroupName});
三、刪除:
EF中實現刪除有三種方式,版本一、二都是根據主鍵刪除,版本三是根據任意條件到資料庫查詢然後再根據查詢的結果進行刪除,實際上版本三也是根據查詢出來的結果中的主鍵進行刪除。
1 :根據主鍵刪除
//實例化一個Users對象,並指定Id的值
Users user = new Users() { Id = 1 };
//將user附加到上下文對象中,並獲得EF容器的管理對象
var entry = db.Entry<User>(user);或者 var entry=db.Entry(user);
//設置該對象的狀態為刪除
entry.State = EntityState.Deleted;
//保存修改
db.SaveChanges();
Console.WriteLine("刪除成功!");
2:根據主鍵刪除
//實例化一個Users對象,並指定Id的值
Users user = new Users() { Id = 1 };
//將user附加到上下文對象中
db.Users.Attach(user);
//刪除user對象
Db.Users.Remove(user);
//保存修改
db.SaveChanges();
Console.WriteLine("刪除成功!");
3:根據條件先查詢出來然後再刪除
var list= db.Users.Where(u => u.Name ==”張三”);
if(list!=null&&list.Any())
{
Foreach(User item in list)
{
db.User.Remove(item);
}
}
db.SaveChanges();
四、修改:
1.官方推薦的修改方式(先查詢,再修改)
//將Id為2的Users數據取出
var user = db.Users.Where(u => u.Id == 2).FirstOrDefault();
Console.WriteLine("修改之前:" + user.UserName);
//修改UserName屬性
user.UserName = "222222222222222";
//保存修改
db.SaveChanges();
Console.WriteLine("修改之後:" + user.UserName);
2.自己優化的修改方式
//1)創建出一個要修改的對象
User use = new User() { uId = 8,uName="小白~~~"};
//2)將對象加入 EF容器,並獲取當前實體對象的狀態管理對象
DbEntityEntry<User> entry = db.Entry<User>(user);
//3)設置該對象為未被修改過
entry.State = System.Data.EntityState.Unchanged;
//4)設置該對象的 uName屬性為修改狀態,同時 entry.State 被修改為 Modified 狀態
entry.Property("uName").IsModified = true;
//5)關閉EF實體合法性檢查(如果創建出來的要修改的數據有的欄位沒有賦值則關閉實體合法性檢查,如果所有欄位都賦值了則不用關閉EF實體合法性檢查)
db.Configuration.ValidateOnSaveEnabled = false;
//6)重新保存到資料庫 -- ef 上下文會根據實體對象的狀態,根據 entry.State =Modified 的值生成對應的 update sql 語句.
db.SaveChanges();
Console.WriteLine("修改成功:");
五、增刪改查的另一種方式,純sql。
當遇到複雜的需求,需要書寫複雜語句,但有不特別熟悉EF語法時有兩種方案:
1.資料庫中創建視圖;
2純sql方式;
//1)查詢SqlQuery
result.slList = db.Database.SqlQuery<DataTemp>("select Precision,Year,LandCover, sum(Area) as Area from [EcoTypes] where LandCover=@type group by Precision, Year, LandCover", new SqlParameter("@type", "森林")).Select(d=> d.Area).ToList();
//2)增刪改:ExecuteSqlCommand
db.Database.ExecuteSqlCommand("").ToString();
詳情請db.Database. 此時會出現所有方式和相應的說明文字。
註釋: db是視圖對象模型。
EcologyEntities db = new EcologyEntities();
六、當以上方法都不能滿足是,大不了寫點原生ADO代碼,一個項目兩種ORM也是可以的,只要能解決複雜問題。
轉載來源 https://www.cnblogs.com/zhuyuchao/p/5634196.html