SaveChanges()只影响一行

时间:2016-05-02 08:10:39

标签: linq entity-framework-6 datacontext savechanges

我想删除一些记录,并尝试使用以下代码:

if (objDetail != null) 
{
    objContext.DetailVouchers.RemoveRange(
        objContext.DetailVouchers.Where(t => t.REFNO == strRefNo));
    objContext.SaveChanges();
}

但它只删除了最后一条记录而不是全部记录。

我的上下文类是

class MainContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //base.OnModelCreating(modelBuilder);

            Database.SetInitializer<MainContext>(null);

        modelBuilder.Entity<MainVoucher>().ToTable("TBL_ACC_VOUCHER_MAIN");
        modelBuilder.Entity<MainVoucher>().HasKey(t => new { t.REFNO });

        modelBuilder.Entity<DetailVoucher>().ToTable("TBL_ACC_VOUCHER_DETAIL");
        modelBuilder.Entity<DetailVoucher>().HasKey(t => new { t.REFNO });
}
}

并创建上下文类对象,如

MainContext objContext = new MainContext();

2 个答案:

答案 0 :(得分:0)

试试这个。 [编辑]

var items = objContext.DetailVouchers.Where(t => t.REFNO == strRefNo);
objContext.DetailVouchers.RemoveRange(items);
context.SaveChanges();

答案 1 :(得分:0)

在使用RemoveRange之前,您必须先删除要删除的项目列表。 在第一行尝试使用ToList()的reza解决方案:

var items = objContext.DetailVouchers.Where(t => t.REFNO == strRefNo).ToList();
objContext.DetailVouchers.RemoveRange(items);
context.SaveChanges();