我在实体框架中有一个名为雇佣的SQL Server表,其中有一个名为ID的键列。
如何使用实体框架从表中删除单个记录?
我在实体框架中有一个名为雇佣的SQL Server表,其中有一个名为ID的键列。
如何使用实体框架从表中删除单个记录?
当前回答
只是想贡献一下我反复使用的三个方法。
方法1:
var record = ctx.Records.FirstOrDefault();
ctx.Records.Remove(record);
ctx.SaveChanges();
方法2:
var record = ctx.Records.FirstOfDefault();
ctx.Entry(record).State = EntityState.Deleted;
ctx.SaveChanges();
ctx.Entry(record).State = EntityState.Detached;
我更喜欢使用方法2的原因之一是因为在设置EF或EFCore为QueryTrackingBehavior的情况下。NoTracking,这样做更安全。
还有方法3:
var record = ctx.Records.FirstOrDefault();
var entry = ctx.Entry(record);
record.DeletedOn = DateTimeOffset.Now;
entry.State = EntityState.Modified;
ctx.SaveChanges();
entry.State = EntityState.Detached;
通过设置记录的DeletedOn属性,这利用了一种软删除方法,并且仍然能够保留记录以供将来使用,无论将来可能使用什么。基本上就是把它放进回收站。
此外,对于方法3,不是将整个记录设置为要修改:
entry.State = EntityState.Modified;
你也可以简单地将DeletedOn列设置为modified:
entry.Property(x => x.DeletedOn).IsModified = true;
其他回答
您可以使用SingleOrDefault获取与您的条件匹配的单个对象,然后将其传递给EF表的Remove方法。
var itemToRemove = Context.Employ.SingleOrDefault(x => x.id == 1); //returns a single item.
if (itemToRemove != null) {
Context.Employ.Remove(itemToRemove);
Context.SaveChanges();
}
[HttpPost]
public JsonResult DeleteCotnact(int id)
{
using (MycasedbEntities dbde = new MycasedbEntities())
{
Contact rowcontact = (from c in dbde.Contact
where c.Id == id
select c).FirstOrDefault();
dbde.Contact.Remove(rowcontact);
dbde.SaveChanges();
return Json(id);
}
}
你觉得这个简单与否,你也可以试试这个:
var productrow = cnn.Product.Find(id);
cnn.Product.Remove(productrow);
cnn.SaveChanges();
Employer employer = context.Employers.First(x => x.EmployerId == 1);
context.Customers.DeleteObject(employer);
context.SaveChanges();
只是想贡献一下我反复使用的三个方法。
方法1:
var record = ctx.Records.FirstOrDefault();
ctx.Records.Remove(record);
ctx.SaveChanges();
方法2:
var record = ctx.Records.FirstOfDefault();
ctx.Entry(record).State = EntityState.Deleted;
ctx.SaveChanges();
ctx.Entry(record).State = EntityState.Detached;
我更喜欢使用方法2的原因之一是因为在设置EF或EFCore为QueryTrackingBehavior的情况下。NoTracking,这样做更安全。
还有方法3:
var record = ctx.Records.FirstOrDefault();
var entry = ctx.Entry(record);
record.DeletedOn = DateTimeOffset.Now;
entry.State = EntityState.Modified;
ctx.SaveChanges();
entry.State = EntityState.Detached;
通过设置记录的DeletedOn属性,这利用了一种软删除方法,并且仍然能够保留记录以供将来使用,无论将来可能使用什么。基本上就是把它放进回收站。
此外,对于方法3,不是将整个记录设置为要修改:
entry.State = EntityState.Modified;
你也可以简单地将DeletedOn列设置为modified:
entry.Property(x => x.DeletedOn).IsModified = true;
var stud = (from s1 in entities.Students
where s1.ID== student.ID
select s1).SingleOrDefault();
//Delete it from memory
entities.DeleteObject(stud);
//Save to database
entities.SaveChanges();