我在实体框架中有一个名为雇佣的SQL Server表,其中有一个名为ID的键列。
如何使用实体框架从表中删除单个记录?
我在实体框架中有一个名为雇佣的SQL Server表,其中有一个名为ID的键列。
如何使用实体框架从表中删除单个记录?
当前回答
我使用实体框架与LINQ。下面的代码对我很有帮助;
1-用于多条记录
using (var dbContext = new Chat_ServerEntities())
{
var allRec= dbContext.myEntities;
dbContext.myEntities.RemoveRange(allRec);
dbContext.SaveChanges();
}
2-单张唱片
using (var dbContext = new Chat_ServerEntities())
{
var singleRec = dbContext.ChatUserConnections.FirstOrDefault( x => x.ID ==1);// object your want to delete
dbContext.ChatUserConnections.Remove(singleRec);
dbContext.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;
不需要先查询对象,可以通过它的id将它附加到上下文。 是这样的:
var employer = new Employ { Id = 1 };
ctx.Employ.Attach(employer);
ctx.Employ.Remove(employer);
ctx.SaveChanges();
或者,你可以将附加条目的状态设置为已删除:
var employer = new Employ { Id = 1 };
ctx.Entry(employer).State = EntityState.Deleted;
ctx.SaveChanges();
对于泛型DAO,这是可行的:
public void Delete(T entity)
{
db.Entry(entity).State = EntityState.Deleted;
db.SaveChanges();
}
在实体框架6中,你可以使用Remove。 这也是一个很好的策略来确保你的连接是关闭的。
using (var context = new EmployDbContext())
{
Employ emp = context.Employ.Where(x => x.Id == id).Single<Employ>();
context.Employ.Remove(emp);
context.SaveChanges();
}
Employer employer = context.Employers.First(x => x.EmployerId == 1);
context.Customers.DeleteObject(employer);
context.SaveChanges();