2010-11-23 2 views
0

J'essaie de créer une méthode qui peut mettre à jour la sous-table d'une entité, qu'elle soit nouvelle ou existante. Je crois comprendre que pour les nouvelles entités, ajouter les enfants comme ceci:LINQ: Créer une sous-table sur une entité si ce n'est déjà fait

ChildEntityENT child = new ChildEntityENT(); 
Entity.ChildEntityENT = child; 

Et à partir de là, je peux accéder comme ceci:

Entity.ChildEntityENT.Value1 = MyValue; 
Entity.ChildEntityENT.Value2 = MyValue; 

Mais j'ai une classe de base que je veux travailler avec différents types Entity et ChildEntityENT. Ma première idée était de faire quelque chose dans ce sens, mais je n'arrive pas à le faire fonctionner. Fondamentalement, j'allais laisser le développeur utiliser une expression lambda pour pointer de l'Entité de base à ChildEntityENT, puis ma méthode vérifierait ChildEntityEnt et instancierait une nouvelle copie vierge si elle n'existait pas déjà. Si cela existe, il n'a pas besoin de faire quoi que ce soit.

public void CreateIfNull(Expression<Func<Entity, object>> Child) 
{ 
    if (Entity.Child == null) 
    { 
     ChildENT = new ChildENT(); 
     Entity.ChildENT = ChildENT; 
    } 
} 

S'il me manque complètement la balle sur celui-ci, s'il vous plaît faites le moi savoir. Je suis tout à propos de trouver des moyens plus faciles de faire les choses. Je souhaite que LINQ ne m'ait pas obligé à créer manuellement un nouveau ChildEntityENT avant d'essayer de lui assigner des valeurs.

EDIT: Je suis en train d'essayer de faire exactement la même chose que ce gars-là: Adding a child entity to parent entityset

Répondre

0

Je fini par résoudre comme ça.

public void CreateChildIfNull(LambdaExpression Child) 
    { 
     Type ChildType = Child.Body.Type; 
     var NewChild = Activator.CreateInstance(ChildType); 
     Entity.GetType().GetProperty(ChildType.Name).SetValue(Entity, NewChild, null); 
    } 
Questions connexes