2011-10-01 3 views
0

Beaucoup de Like pour EF4.1, mais sont restés bloqués en faisant ça! Je veux finir avec une classe comme celle-ci, où EF gère les deux propriétés, et elles sont toutes les deux dans la base de données.Entity Framework 4.1 Persistance d'un getter

public class myClass 
{ 
    public int priority { get; set; } 
    public string status { get { return priority > 10 ? "Low" : "High" } } 
} 

1) Lorsque je produis le modèle de la base de données, je dois injecter en quelque sorte le calcul de l'état dans sa propriété.
2) J'espère que la solution fonctionne lorsque je régénère mon modèle à partir de la base de données.

Répondre

0

Vous ne pouvez pas conserver cette propriété. C'est la logique métier (propriété calculée). Si vous voulez l'enregistrer, la propriété doit avoir setter car EF essayera de le définir lors de la matérialisation de l'entité depuis la base de données mais une fois que vous aurez exposé un setter votre getter n'aura aucun sens et cette logique devra être déplacée ailleurs.

Edit:

La solution consiste à envelopper votre logique Status en méthode d'extension d'aide:

public static IsHighPriority(this IQueryable<MyClass> query) 
{ 
    return query.Where(x => x.Priority > 10); 
} 

Maintenant, vous pouvez l'utiliser dans la requête comme:

var query = from x in context.MyClasses.IsHighPriority() 
      where ... 
      select x; 
+0

Hmm. J'ai abordé ce point de vue de la façon dont les couches de l'entreprise pour pousser l'IQueryable. J'ai trouvé que si j'utilisais la propriété de statut dans un IQueryable alors j'obtiens une erreur parce que le champ n'est pas dans la base de données, d'où le désir de le persister dans la base de données. Si cela n'est pas autorisé, j'ai souvent vu cette logique mise dans la base de données sous forme de colonnes calculées, que EF peut gérer, cependant, sous votre argument, mettre la logique métier dans la base de données serait encore pire. Vous avez laissé un "Ailleurs" alléchant, des suggestions? – DNeedy

+0

J'ai ajouté une suggestion. –

Questions connexes