2016-05-02 4 views
0

Я хочу удалить несколько записей, и я попытался, используя следующий код: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(); 
+0

Сколько 'DetailVoucher' записей может соответствовать одному' REFNO'? Согласно вашей настройке модели ('Entity (). HasKey (t => t => new {t.REFNO})', ноль или один. –

+0

Его показ 2 записи, но он удалил только последний –

+0

В этом проблема то, в соответствии с конфигурацией ** модели **, 'DetailVoucher.REFNO' является ** уникальным **. –

ответ

0

Попробуйте это. [EDIT]

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

Я уже пробовал это, но он фиксировал только одну запись, и даже если я вставляю несколько строк и применяю savechanges(), тогда он c ommit только последняя строка и отбросила все остальные строки –

+0

, пожалуйста, проверьте, что я редактирую свой ответ. меня устраивает. –

+0

Еще одна проблема. Я получаю все записи, но влияет только на последнюю запись –

0

Вы должны сделать свой список предметов, которые необходимо удалить перед использованием RemoveRange. Решение попробовать Резы с ToList() на первой линии:

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

Я сделал то же самое –

+0

Хорошо, это работает, когда вы используете цикл вместо RemoveRange? – BrunoA

+0

Нет, это не так. Только последняя удаленная запись –

Смежные вопросы