[英]How to do cascade delete efficiently in Entity Framework
我一直在尋找執行級聯刪除的高性能方法,但一直未能做到。 似乎我必須使用.Include()
來加載任何依賴項,然后再將IQueryable
傳遞給RemoveRange()
,這要花很長時間,因為它首先將所有這些條目加載到內存中。
有沒有一種方法可以直接使用EF直接發出SQL命令來刪除有問題的實體以及任何依賴關系?
如果使用UnitOfWork,則可以使用ExecuteSqlCommandAsync
執行sql
public async Task<int> ExecuteCommandAsync(string sqlCommand, params object[] parameters)
{
return await this.DataContext.Database.ExecuteSqlCommandAsync(sqlCommand, parameters);
}
或者,如果您直接使用上下文
using(var context = new SampleContext())
{
var commandText = "Delete from MyTable where Id=@id";
var name = new SqlParameter(@id", 1);
context.Database.ExecuteSqlCommand(commandText, name);
context.SaveChanges();
}
使用Fluent API配置實體以使用WillCascadeOnDelete()
關閉級聯刪除
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasOptional<Standard>(s => s.Standard)
.WithMany()
.WillCascadeOnDelete(false);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.