如何用entity framework通过id删除一个对象
在我看来,我必须检索一个对象,然后用下面的entity framework删除它
var customer = context.Customers.First(c => c.Id = 1); context.DeleteObject(customer); context.Savechanges();
所以我需要打两次数据库。 有更简单的方法吗?
与@Nix相同,只是一个很小的变化就是强types的:
如果你不想查询它只是创build一个实体,然后删除它。
Customer customer = new Customer () { Id = id }; context.Customers.Attach(customer); context.Customers.DeleteObject(customer); context.SaveChanges();
在entity framework6中,删除操作是Remove
。 这是一个例子
Customer customer = new Customer () { Id = id }; context.Customers.Attach(customer); context.Customers.Remove(customer); context.SaveChanges();
如果你不想查询它只是创build一个实体,然后删除它。
Customer customer = new Customer() { Id = 1 } ; context.AttachTo("Customers", customer); context.DeleteObject(customer); context.Savechanges();
类似的问题在这里
用Entity Framework有EntityFramework-Plus (扩展库)。
在NuGet上可用。 那么你可以写下如下的东西:
// DELETE all users which has been inactive for 2 years ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) .Delete();
这对批量删除也很有用。
原始的SQL查询是我想的最快的方式
public void DeleteCustomer(int id) { using (var context = new Context()) { const string query = "DELETE FROM [dbo].[Customers] WHERE [id]={0}"; var rows = context.Database.ExecuteSqlCommand(query,id); // rows >= 1 - count of deleted rows, // rows = 0 - nothing to delete. } }
如果您使用的是EF 1.0,那就是最简单的方法。 可能有其他的方式,但他们比他们值得恕我直言更麻烦。
我在我的一个项目中使用下面的代码:
using (var _context = new DBContext(new DbContextOptions<DBContext>())) { try { _context.MyItems.Remove(new MyItem() { MyItemId = id }); await _context.SaveChangesAsync(); } catch (Exception ex) { if (!_context.MyItems.Any(i => i.MyItemId == id)) { return NotFound(); } else { throw ex; } } }
这样,只有当试图删除具有指定ID的项目时发生exception,它才会查询数据库两次。 然后,如果该项目没有find,它会返回一个有意义的消息; 否则,它只是抛出exception回来(你可以处理这个更适合你的情况下使用不同的catch块为不同的exceptiontypes,添加更多的自定义检查,如果块等)。
[我在使用Entity Framework Core的MVC .Net Core / .Net Core项目中使用此代码。]