2010-07-13 5 views
0

J'essaie de mettre à jour les données de la table parent référencée dans la table enfant à partir de la vue de l'enfant dans Asp.net. J'ai mappé les tables en utilisant Fluent Nhibernate.Mise à jour de la table parent depuis l'enfant dans Asp.net et nhibernate fluide

Dans la table des enfants, la mise en correspondance ressemble à ceci:

public class ChildMap: ClassMap<Child> 
{ 
    public ChildMap() 
    { 
     Id(i => i.childID).Not.Nullable(); 
     Map(i => i.childValue1); 
     Map(i => i.childValue2); 
     Map(i => i.childValue3); 
     References(i => i.parent, "parentID").Cascade.All(); 
    } 

La cartographie de table parent:

public class ParentMap: ClassMap<Parent> 
{ 
    public ParentMap() 
    { 
     Id(i => i.parentID).Not.Nullable(); 
     Map(i => i.parentValue1); 
     Map(i => i.parentValue2); 
     Map(i => i.parentValue3); 
     HasMany(i => i.Child).KeyColumn("childID").Cascade.All().Inverse(); 

    } 
} 

Dans mon contrôleur, il ressemble à ceci ...

[HttpPost] 
    public ActionResult Edit(int id, FormCollection collection) 
    { 

     try 
     { 
      using (var tr = UnitOfWork.CurrentUnitOfWork.BeginTransaction()) 
      { 
       try 
       { 

        var child= Registry.Childs.Get(id); 

        //This update works 
        UpdateModel(child, new[] { "childValue1", "childValue2", "childValue3" }, collection.ToValueProvider()); 

        //This update on the parent doesn't work 
        UpdateModel(child.parent, new[] { "child.parent.parentValue1", "child.parent.parentValue2", "child.parent.parentValue3" }, collection.ToValueProvider()); 

        tr.Commit(); 
       } 
       catch (Exception) 
       { 
        tr.Rollback(); 
        throw; 
       } 
      } 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

Avec les codes ci-dessus, lorsque j'essaie de mettre à jour les valeurs dans la table enfant, cela fonctionne. Toutefois, si j'essaie d'enregistrer les modifications dans la table parente, cela ne fonctionne pas.

Avez-vous des idées pour résoudre ce problème?

Merci.

Répondre

0

Ok .. Je viens de répondre à ma propre question. Fondamentalement, il suffit d'ajouter le nom de la table du parent pour que cela fonctionne.

UpdateModel(child.parent, "Parent", new[] { "child.parent.parentValue1", "child.parent.parentValue2", "child.parent.parentValue3" }, collection.ToValueProvider()); 

Yay !!!

Questions connexes