2010-10-02 5 views
1

Mon application particulière est une application ASP.NET MVC utilisant Entity Framework.ASP.NET MVC/EF: Comment gérer les propriétés de navigation sur une nouvelle entité?

J'ai un objet Entity0 qui contient une référence (* 1) à Entité1 ...

public class Entity_0 
{ 
    public int ID { get; set; } 
    public int Entity_1_ID { get; set; } 
    public Entity_1 Entity_1 { get; set; } 
} 

J'ai aussi une certaine logique dans Entity_0, mais cette logique exige que Entité_1 ne soit pas nulle ...

public Entity_2 GetEntity_2() 
{ 
    return new Entity_2() { Number = Entity_1.Value * 10 }; 
} 

Quand une nouvelle instance de Entity_0 est créé par modèle de liaison dans le contrôleur, la propriété Entity_1_ID est définie, mais la propriété de navigation Entité_1 reste nulle jusqu'à ce qu'il soit persistait à la base de données.

Je dois appeler GetEntity_2() et enregistrer Entity_0 et Entity_2 dans la base de données comme une seule unité de travail. À l'heure actuelle, cela signifie que je dois extraire manuellement Entity_1 du référentiel et l'affecter à Entity_0 avant d'appeler la fonction.

L'autre option que je considérais serait de faire de Entity_1 un paramètre de la méthode GetEntity_2, mais toute autre fois que cette méthode s'appelle Entity_1 ne sera pas nulle, donc il serait redondant d'exiger un paramètre. Donc, évidemment, tout fonctionne actuellement, mais ma question est de savoir si je viole ou non une règle de conception de POO en a) ayant une méthode qui pourrait lancer une exception de référence nulle ou b) en spécifiant un paramètre de méthode qui devrait seulement être utilisé une partie du temps.

Avoir manuellement assigné la propriété de navigation m'inquiète vraiment. J'espère que certains d'entre vous ont des suggestions sur la façon dont je peux améliorer cela.

Merci!

Répondre

0

Ah cela s'est avéré être beaucoup plus facile que je l'avais imaginé!

La propriété de navigation Entity_1 est renseignée après l'ajout de l'objet au contexte. J'étais sous l'impression que c'était null jusqu'à ce que j'ai appelé SaveChanges() et l'ai persisté à la base de données.

Cela rend plus facile d'appeler le code comme suit ...

var entity_1 = Entity_1CreateViewModel.Entity_1; 
entitiesRepository.Add(entity_1); 
entitiesRepository.Add(entity_1.GetEntity_2()); 
entitiesRepository.Save(); 
Questions connexes