2012-02-03 4 views
0

J'ai un scénario avec deux applications différentes partageant la même base de données. Pour les deux applications, j'utilise Code First EF 4.1. Ces deux applications partagent également une bibliothèque commune. Tout va bien jusqu'à ce que je commence à ajouter l'héritage spécifique à l'application. Par exemple, dire que j'ai une classe dans la bibliothèque partagée comme celui-ciCode Premier héritage EF 4.1 sur plusieurs applications

public class Customer 
{ 
    public CustomerOrder Order; 
} 

Et puis, dans une application, je hérite CustomerOrder d'ajouter quelques fonctionnalités personnalisées nécessaires à l'application.

public class EditableCustomerOrder: CustomerOrder 
{ 
    public void Edit() {}; 
} 

Dans cette application, je souhaite que tous mes CustomerOrders se chargent en tant que EditableCustomerOrders. Cependant, je ne peux pas trouver un moyen de spécifier dans le mappage qu'il doit ignorer CustomerOrder et mapper uniquement EditableCustomerOrder à la table sous-jacente.

J'ai essayé

modelBuilder.Ignore<CustomerOrder>(); 

mais qui omet la propriété ordre du client, donc je ne peux pas l'utiliser. Le seul moyen d'obtenir ce résultat est d'utiliser des génériques, de sorte que le client utilise un générique pour son type CustomerOrder, puis j'implémente le client dans l'application pour spécifier qu'il utilise EditableCustomerOrder. Cependant, cette solution peut se développer assez rapidement, avec des génériques partout.

Est ce que j'essaye de faire possible? Fondamentalement, j'essaie de dire à l'entité que, même s'il existe un type de base et un type étendu, je veux qu'il utilise uniquement le type étendu.

Répondre

0

Au cas où des êtres désespérés trébucheraient à travers cela, je me suis dit que je posterais la solution que j'ai trouvée. La seule façon que j'ai trouvée pour créer un scénario comme celui-ci était d'utiliser des classes abstraites comme classe de base définie dans la bibliothèque partagée, puis d'étendre cette classe de base dans chaque application. De cela, je pourrais écrire un DbContext pour chaque application qui a ignoré toutes les propriétés ajoutées sur les classes étendues. Avec tout cela en place, je suis en mesure d'utiliser Entity pour mapper à différentes implémentations dans différentes applications au même ensemble de classes de base.

Je voudrais également déconseiller cette idée globale comme une solution. Je l'ai eu en place depuis plusieurs mois maintenant. Cela fonctionne, mais il est difficile de travailler avec et se méprendre. Pour m'éloigner de cela, je vais sceller mes classes de modèles et me concentrer plutôt sur une solution MVVM pour chaque application.

Questions connexes