2016-10-19 4 views
0

У меня есть StudentRegistration Модель класс следующегоОбновление базы данных - Удаление существующих данных и добавление новых данных с entityframework

public partial class StudentRegistration 
{ 
    public StudentRegistration() 
    {    
     this.StudentReceipts = new HashSet<StudentReceipt>();    
    } 

    public int Id { get; set; } 
    public Nullable<int> StudentWalkInnID { get; set; } 
    ... 
    ... 

    public virtual ICollection<StudentReceipt> StudentReceipts { get; set; } 

} 
public partial class StudentReceipt 
{ 
    public int Id { get; set; } 
    public Nullable<int> StudentRegistrationID { get; set; } 
    ... 
    ...  

    public virtual StudentRegistration StudentRegistration { get; set; } 
} 

Я пытался удалить существующий список studentreceipt и добавить новый list.The new studentreceipt list правильно добавлять в базе данных но existing studentreceipt list не удаляется из базы данных, а StudentRegistrationId из existing studentreceipt list установлено в null.

Я хочу удалить существующие studentreceipt list из базы данных и добавить новый список. Как я могу это сделать?

Это то, что я попытался

using (TransactionScope _ts = new TransactionScope()) 
{ 
    _dbRegn = _db.StudentRegistrations 
    .Where(r => r.Id == Id).FirstOrDefault(); 
    if (_dbRegn != null) 
    {      
    //Remove existing receipts 
    foreach (var _existingReceipt in _dbRegn.StudentReceipts.ToList()) 
    { 
     _dbRegn.StudentReceipts.Remove(_existingReceipt); 
    }       

    //adding new receipt 
    foreach (var _receipt in mdlCourseInterchange.StudentReceiptList) 
    { 
     StudentReceipt _studReceipt = new StudentReceipt(); 
     //... 
     //... 
     _dbRegn.StudentReceipts.Add(_studReceipt); 
    } 
    //... 
    //.. 

    db.Entry(_dbRegn).State = EntityState.Modified; 
    int j = _db.SaveChanges(); 
    if (j > 0) 
    { 
     _ts.Complete(); 
     return Json(new { message = "success" }, JsonRequestBehavior.AllowGet); 
    } 
    } 
} 
+0

Как я уже упоминал выше, новый список studentreceipt правильно добавлять в базу данных, но существующий список studentreceipt не получает удален из базы данных .Infact StudentRegistrationId из существующего списка studentreceipt устанавливается в нуль. – ksg

+0

Итак, есть ли 'StudentReceipts' в' _dbRegn.StudentReceipts.ToList() '? –

+0

Да, будет 'StudentReceipts' в' _dbRegn.StudentReceipts.ToList() '. И я хочу удалить существующий список и добавить новый список. – ksg

ответ

1

Вы можете попробовать, как показано ниже.

using (TransactionScope _ts = new TransactionScope()) 
{ 
    _dbRegn = _db.StudentRegistrations.Where(r => r.Id == Id).FirstOrDefault(); 

    if (_dbRegn != null) 
    {      
    //Remove existing receipts 
    foreach (var _existingReceipt in _dbRegn.StudentReceipts.ToList()) 
    { 
     __db.StudentReceipts.Remove(_existingReceipt); 
    }       

    //adding new receipt 
    foreach (var _receipt in mdlCourseInterchange.StudentReceiptList) 
    { 
     StudentReceipt _studReceipt = new StudentReceipt(); 
     //... 
     //... 
     _db.StudentReceipts.Add(_studReceipt); 
    } 
    //... 
    //.. 

    int j = _db.SaveChanges(); 
    if (j > 0) 
    { 
     _ts.Complete(); 
     return Json(new { message = "success" }, JsonRequestBehavior.AllowGet); 
    } 
    } 
} 
+0

Спасибо за ваш ответ mate.I есть небольшое сомнение, если случайно что-то пошло не так после «удаления studentreceipt и до добавления новой квитанции», будет ли «существующая квитанция» удалена или она будет удалена только после '_ts.Complete() ' – ksg

+1

Это произойдет после' _ts.Complete() '. Если какая-либо из операций завершится неудачей, все операции будут отменены. Это ключевое преимущество использования транзакций. – Sampath