2016-10-19 1 views
0

Je StudentRegistration Modèle classe comme suitBase de données mise à jour - Suppression des données existantes et l'ajout de nouvelles données avec 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; } 
} 

je tentais de supprimer la liste existante de studentreceipt et ajouter de nouvelles list.The new studentreceipt list est correctement dans la ajoutant base de données mais le existing studentreceipt list ne se supprime pas de la base de données et le de existing studentreceipt list est défini sur null.

Je veux supprimer le studentreceipt list existant de la base de données et ajouter une nouvelle liste.Comment puis-je le faire?

C'est ce que j'ai essayé

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

Comme je l'ai mentionné plus haut la nouvelle liste de studentreceipt ajoute correctement dans la base de données, mais la liste des studentreceipt existante ne reçoit pas supprimé de la base .Infact la StudentRegistrationId de la liste des studentreceipt existante est définie sur null. – ksg

+0

Y a-t-il des 'StudentReceipts' dans' _dbRegn.StudentReceipts.ToList() '? –

+0

Oui, il y aura 'StudentReceipts' dans' _dbRegn.StudentReceipts.ToList() '.Et je veux supprimer la liste existante et ajouter la nouvelle liste – ksg

Répondre

1

Vous pouvez voir ci-dessous.

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

Merci pour votre réponse mate.J'ai un petit doute, si accidentellement quelque chose s'est mal passé après 'enlèvement de studentreceipt et avant d'ajouter un nouveau reçu', sera le' reçu existant 'sera supprimé ou il sera supprimé seulement après '_ts.Complete() ' – ksg

+1

Cela se produira après' _ts.Complete() '.Si l'une des opérations échoue, alors toutes les opérations seront annulées. C'est l'avantage clé de l'utilisation des transactions. – Sampath