实体框架:如何通过主键删除记录?

Jon*_*len 13 entity-framework

如何在不先加载SELECT语句来加载实体的情况下,通过主键删除记录?

Lad*_*nka 20

你可以使用虚拟对象:

var entity = new YourEntity { Key = yourKey };
context.Entities.Attach(entity);
context.Entities.DeleteObject(entity);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

  • 从EF 5.0开始,您需要使用context.Entities.Remove(entity); 而不是context.Entities.DeleteObject(entity); (7认同)

小智 3

您使用哪个版本的实体框架?

如果您使用 Entity Framework 4.1 或更高版本,并使用 DbContext 类,则可以使用 ExecuteSqlCommand() 方法将 DELETE 语句发送到数据库。请参阅http://blogs.msdn.com/b/adonet/archive/2011/02/04/using-dbcontext-in-ef-feature-ctp5-part-10-raw-sql-queries.aspx(查看将原始命令发送到数据库部分)。这看起来像:

DbContext ctx = ... get your DbContext somehow...
ctx.Database.ExecuteSqlCommand("DELETE FROM Foo WHERE FooID = 17");
Run Code Online (Sandbox Code Playgroud)

如果您使用 Entity Framework 4.0 和 ObjectContext(而不是 DbContext),则有一个类似的 ExecuteStoreCommand 方法 (http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executestorecommand.aspx)。