日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Entity Framework学习三:查询、插入、更新和删除操作

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Entity Framework学习三:查询、插入、更新和删除操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.LINQ過濾數據?

var query = from person in context.Peoplewhere person.FirstName.StartsWith("a")select person;
var methodQuery = context.People.Where(p => p.FirstName.StartsWith("a"));

兩種不同的寫法,效果一樣。

  • 多條件組合查找
var query = from person in context.Peoplewhere person.FirstName.StartsWith("a") &&person.LastName.EndsWith("b")select person;
var methodQuery = context.People.Where(p => p.FirstName.StartsWith("a") && p.LastName.EndsWith("b"));
  • 對查找結果排序升序:
            var query = from person in context.Peoplewhere person.FirstName.StartsWith("a") &&person.LastName.EndsWith("b")orderby person.FirstName,person.LastNameselect person;var methodQuery = context.People.Where(p => p.FirstName.StartsWith("a") && p.LastName.EndsWith("b")).OrderBy(p => p.FirstName).ThenBy(p => p.LastName);
  • 對查找結果排序降序:
            var query = from person in context.Peoplewhere person.FirstName.StartsWith("a") &&person.LastName.EndsWith("b")orderby person.FirstName,person.LastNamedescendingselect person;var methodQuery = context.People.Where(p => p.FirstName.StartsWith("a") && p.LastName.EndsWith("b")).OrderByDescending(p => p.FirstName).ThenByDescending(p => p.LastName);
  • 延遲加載和貪婪加載(Lazy Loading和eager loading)

如果不確定是否要加載關聯數據時就使用延遲加載,否則就使用貪婪加載。當然這個不是固定的看具體什么場景下使用。默認情況下延遲加載是生效的,可以在創建DbContex后配置選項

context.Configuration.LazyLoadingEnabled = false;

2.插入數據

多種方法,不多說看代碼:

  • 方法一
var person = new Person
{
BirthDate = new DateTime(1980, 1, 2),
FirstName = "John",
HeightInFeet = 6.1M,
IsActive = true,
LastName = "Doe",
MiddleName = "M"
};
person.Phones.Add(new Phone { PhoneNumber = "1-222-333-4444" });
person.Phones.Add(new Phone { PhoneNumber = "1-333-4444-5555" });
using (var context = new Context())
{
context.People.Add(person);
context.SaveChanges();
}

方法二:改變Entity的狀態

using (var context = new Context())
{
context.Entry(person2).State = EntityState.Added;
context.SaveChanges();
}

EntityState:Added、Deleted、Detached(DbContex不追蹤Entity狀態)、Modified、Unchanged

3.更新數據

多種方法:

方法一:

using (var context = new Context())
{
var person = context.People.Find(1);
person.FirstName = "New Name";
context.SaveChanges();
}

方法二(建議使用)注意標記部分:

var person2 = new Person
{
PersonId = 1,
BirthDate = new DateTime(1980, 1, 2),
FirstName = "Jonathan",
HeightInFeet = 6.1m,
IsActive = true,
LastName = "Smith",
MiddleName = "M"
};
person2.Phones.Add(new Phone
{
PhoneNumber = "updated 1",
PhoneId = 1,
PersonId = 1
});
person2.Phones.Add(new Phone
{
PhoneNumber = "updated 2",
PhoneId = 2,
PersonId = 1
});
using (var context = new Context())
{
context.Entry(person2).State = EntityState.Modified;
context.SaveChanges();
}

你會發現執行上面代碼只有Person數據更新了,Phone數據沒有更新,這是因為Insert和Update機制不一樣,Update時設置了Entity的EntityState,但是并沒有傳播到子數據的狀態,需要都上面程序做些修改

using (var context = new Context())
{
context.Entry(person2).State = EntityState.Modified;
foreach (var phone in person2.Phones)
{
context.Entry(phone).State = EntityState.Modified;
}
context.SaveChanges();
}

在開發Web程序時可以使用AsNoTracking來提高查詢性能

using (var context = new Context())
{
var query = context.People.Include(p =>
p.Phones).AsNoTracking();
foreach (var person in query)
{
foreach (var phone in person.Phones)
{
}
}
}
  • 使用Attach 會改變狀態為Unchanged,并開始追蹤Entity的狀態
var person3 = new Person
{
PersonId = 1,
BirthDate = new DateTime(1980, 1, 2),
FirstName = "Jonathan",
HeightInFeet = 6.1m,
IsActive = true,
LastName = "Smith",
MiddleName = "M"
};
using (var context = new Context())
{
context.People.Attach(person3);
person3.LastName = "Updated";
context.SaveChanges();
}

上面代碼執行將僅僅只會更新LastName列。也可以用以下代碼替代Attach方法

context.Entry(person3).State = EntityState.Unchanged

4.刪除數據

  • 方法一:先查詢出數據,再刪除(注意刪除子數據可以使用設置數據庫級聯刪除更方便)
using (var context = new Context())
{
var toDelete = context.People.Find(personId);
toDelete.Phones.ToList().ForEach(phone =>context.Phones.Remove(phone));
context.People.Remove(toDelete);
context.SaveChanges();
}
  • 方法二:使用改變狀態
var toDeleteByState = new Person { PersonId = personId };
toDeleteByState.Phones.Add(new Phone
{
PhoneId = phoneId1,
PersonId = personId
});
toDeleteByState.Phones.Add(new Phone
{
PhoneId = phoneId2,
PersonId = personId
});
using (var context = new Context())
{
   context.People.Attach(toDeleteByState);
   foreach (var phone in toDeleteByState.Phones.ToList()){context.Entry(phone).State = EntityState.Deleted;}context.Entry(toDeleteByState).State = EntityState.Deleted;context.SaveChanges();
}

5.查詢本地數據

當需要查詢的數據已經在內存中,而未提交到數據庫時對內存數據進行查詢

var localQuery = context.People.Local.Where(p =>
p.LastName.Contains("o")).ToList();

轉載于:https://www.cnblogs.com/zjmsky/p/4823847.html

總結

以上是生活随笔為你收集整理的Entity Framework学习三:查询、插入、更新和删除操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。