use*_*476 184 c# sql-server entity-framework
我在实体框架中有一个SQL Server表,名为employ一个名为的单个键列ID.
如何使用Entity Framework从表中删除单个记录?
mt_*_*erg 344
没有必要首先查询对象,您可以通过其id将其附加到上下文.像这样:
var employer = new Employ { Id = 1 };
ctx.Employ.Attach(employer);
ctx.Employ.Remove(employer);
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
或者,您可以将附加条目的状态设置为已删除:
var employer = new Employ { Id = 1 };
ctx.Entry(employer).State = EntityState.Deleted;
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
Man*_*eld 77
您可以使用SingleOrDefault获取符合条件的单个对象,然后将其传递给RemoveEF表的方法.
var itemToRemove = Context.Employ.SingleOrDefault(x => x.id == 1); //returns a single item.
if (itemToRemove != null) {
Context.Employ.Remove(itemToRemove);
Context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*x G 13
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();
Run Code Online (Sandbox Code Playgroud)
Employer employer = context.Employers.First(x => x.EmployerId == 1);
context.Customers.DeleteObject(employer);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我在 LINQ 中使用实体框架。以下代码对我有帮助;
1- 对于多条记录
using (var dbContext = new Chat_ServerEntities())
{
var allRec= dbContext.myEntities;
dbContext.myEntities.RemoveRange(allRec);
dbContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
只是想贡献我反复使用的三种方法。
方法一:
var record = ctx.Records.FirstOrDefault();
ctx.Records.Remove(record);
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
方法二:
var record = ctx.Records.FirstOfDefault();
ctx.Entry(record).State = EntityState.Deleted;
ctx.SaveChanges();
ctx.Entry(record).State = EntityState.Detached;
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用方法 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;
Run Code Online (Sandbox Code Playgroud)
这通过设置记录的属性来利用软删除方法DeletedOn,并且仍然能够保留记录以供将来使用,无论将来使用什么。基本上,将其放入回收站。
另外,对于方法 3,不要将整个记录设置为被修改:
entry.State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)
您还可以仅设置DeletedOn修改后的列:
entry.Property(x => x.DeletedOn).IsModified = true;
Run Code Online (Sandbox Code Playgroud)