ฉันกำลังพยายามสร้างแบบสอบถามสำหรับกรอบงานเอนทิตีที่จะช่วยให้ฉันสามารถจดรายการรหัสและอัปเดตฟิลด์ที่เกี่ยวข้องได้
ตัวอย่างใน SQL:
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
ฉันจะแปลงข้างต้นเป็นกรอบงานเอนทิตีได้อย่างไร
ฉันกำลังพยายามสร้างแบบสอบถามสำหรับกรอบงานเอนทิตีที่จะช่วยให้ฉันสามารถจดรายการรหัสและอัปเดตฟิลด์ที่เกี่ยวข้องได้
ตัวอย่างใน SQL:
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
ฉันจะแปลงข้างต้นเป็นกรอบงานเอนทิตีได้อย่างไร
Friend
จากฐานข้อมูลและอัปเดตคุณสมบัติmsgSentBy
และบันทึกการเปลี่ยนแปลงได้ แต่ EF จะส่งUPDATE
ข้อความสำหรับแต่ละบันทึก นั่นไม่เหมือนกับการอัปเดตจำนวนมากแบบคำสั่งเดียว ตามที่กล่าวไว้ให้มองหาไลบรารีของบุคคลที่สามที่มีการอัปเดตจำนวนมาก
คำตอบ:
บางอย่างเช่นด้านล่าง
var idList=new int[]{1, 2, 3, 4};
using (var db=new SomeDatabaseContext())
{
var friends= db.Friends.Where(f=>idList.Contains(f.ID)).ToList();
friends.ForEach(a=>a.msgSentBy='1234');
db.SaveChanges();
}
คุณสามารถอัปเดตหลายช่องได้ดังต่อไปนี้
friends.ForEach(a =>
{
a.property1 = value1;
a.property2 = value2;
});
ForEach
เป็นวิธีการที่เปิดใช้List
งานและโดยทั่วไปไม่แนะนำให้ใช้เนื่องจากไม่ใช่วิธีการเขียนโปรแกรมที่ใช้งานได้จริง เพียงแค่ใช้foreach
(ตัวดำเนินการ)เหมือนคนทั่วไป
UPDATE SomeTable SET SomeField = SomeValue WHERE Id IN (...)
)
var idList=new int[]{1, 2, 3, 4};
var friendsToUpdate = await Context.Friends.Where(f =>
idList.Contains(f.Id).ToListAsync();
foreach(var item in previousEReceipts)
{
item.msgSentBy = "1234";
}
คุณสามารถใช้ foreach เพื่ออัปเดตแต่ละองค์ประกอบที่ตรงตามเงื่อนไขของคุณ
นี่คือตัวอย่างในลักษณะทั่วไป:
var itemsToUpdate = await Context.friends.Where(f => f.Id == <someCondition>).ToListAsync();
foreach(var item in itemsToUpdate)
{
item.property = updatedValue;
}
Context.SaveChanges()
โดยทั่วไปคุณมักจะใช้วิธี async โดยรอการสืบค้น db