11
votes

Utilisation d'une interface avec une propriété de navigation

J'essaie de configurer un projet à l'aide de l'entité Framework 4, POCO et CODE-UNIQUEMENT.

est-il possible dans la structure d'entité pour le type d'une propriété de navigation pour être une interface? P>

i avoir une classe "tâche". Une tâche peut être affectée à un utilisateur ou à un groupe d'une classe distincte et stockée dans des tables séparées. Les classes ressemblent à ceci comme suit: P>

public class User : IAssignable
{
    public string Name { get; set; }
    public int ID { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

public class Group : IAssignable
{
    public string Name { get; set; }
    public int ID { get; set; }
    public string Manager { get; set; }
    public string Department { get; set; }
}

public class Task
{
    public string Title { get; set; }
    public DateTime DueDate { get; set; }
    public string Details { get; set; }
    public IAssignable AssignedTo { get; set; }
}


0 commentaires

3 Réponses :


0
votes

Vous pouvez vous épargner beaucoup de travail en utilisant la boîte à outils de transformation du modèle de texte (T4) supporté par EF4. J'ai trouvé celui-ci après une bonne 12 heures de recherche d'un moyen de créer manuellement mes pocos et mes interfaces,

http://blogofrab.blogspot.com/ 2010/08 / Maintenance-Free-Mocking-for-Unit.html

En plus de fournir une base brillante pour les tests d'unités, il génère automatiquement des propriétés de navigation en fonction des relations définies dans votre modèle.


0 commentaires

1
votes

Vous pouvez utiliser une interface dans la propriété de navigation, jetez un coup d'œil à cette solution car il est identique à la question: Comment utiliser les propriétés de l'interface avec CodeFirst


0 commentaires

1
votes

Je sais que c'est une ancienne question, mais non, il n'y a pas de caractéristique du cadre d'entité (même la dernière version 6) qui vous permet de mapper une propriété de navigation avec un type d'interface.

Vous pouvez toutefois planer plusieurs propriétés de navigation avec des types de béton (et une contrainte qu'on peut être définie) et fournir une propriété non manifestée de votre type d'interface qui coalesce les propriétés de navigation concrète dans une seule propriété. Malheureusement, cela peut rendre vos questions plus complexes car certaines requêtes devront savoir quelles propriétés de navigation concrète à références (et vous ne pouvez pas interroger sur votre propriété d'interface non accessible).

Il existe une complexité significative autour de la prise en charge des propriétés de navigation polymorphes. Considérez ce qui devrait se produire pour interroger votre propriété Original attribué à si vous supposez qu'il est mappé sur une colonne, telle que attribuedtoid int . Vous devriez avoir union ou rejoindre les deux utilisateur et Groupe Enttiky définit et espérons qu'un attribué attribué à l'un d'eux. Ceci est l'approche utilisée par le Table-Per-Béton (TPC) mappage de type, mais cela ne fonctionne que avec héritage de classe (non interfaces) et une planification minutieuse pour générer des identifiants distincts sur les types participants.


0 commentaires