Polymorphisme EF core ModelBuilder
Bonjour,
Voici l'idée j'ai 3 tables:.
1 table polymorphique ex. Dossier.
2 table propriétaires ex. Client & employé.
Les classes:
- Dossier
Code:
1 2 3 4 5 6
| public class Directory{
public int Id { get; set; }
public UserType Type { get; set; } // "Employe"(0) or "Client"(1)
public int TypeId { get; set; } // Id of the respective Employe or Client
public string Title { get; set; }
} |
- Client
Code:
1 2 3 4
| public class Client{
public int Id { get; set; } // Unique identifier for the client
public ICollection<Directory> Directories { get; set; } // Collection of directories for the client
} |
- employé
Code:
1 2 3 4
| public class Employe {
public int Id { get; set; } // Unique identifier for the employe
public ICollection<Directory> Directories { get; set; } // Collection of directories for the employe
} |
Donc des employés et des clients peuvent posséder des dossiers.
ces dossiers se retrouvent donc tous dans une même table étant donné que l'object est le même seul le propriétaire est différent.
(Ces class sont des class d'exemple, d'où le fait qu'il n'y ai pas d'héritage User, ...)
Je cherche maintenant à générer le code ModelBuilder pour faire la liaison entre ces classes et la table directory en Db
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| modelBuilder.Entity<Directory>()
.HasKey(p => p.Id);
modelBuilder.Entity<Directory>()
.HasDiscriminator<UserType>("Type")
.HasValue<Employee>(UserType.Employee)
.HasValue<Client>(UserType.Client);
modelBuilder.Entity<Directory>()
.HasOne<Employee>()
.WithMany(e => e.Directories)
.HasForeignKey(p => p.TypeId);
modelBuilder.Entity<Directory>()
.HasOne<Client>()
.WithMany(c => c.Directories)
.HasForeignKey(p => p.TypeId);
} |
Voici une exemple des tentatives que j'ai réalisé (je sais pourquoi il ne fonctionnes pas mais je ne vois pas comment je pourrais écrire le ModelBuilder dans ce cas si).
J'ai également essayé de passer par HasDiscriminator mais sans succès.
Je voudrais dans la mesure du possible éviter de créer un objet de liaison (Client ou Employee) dans Directory.
Merci d'avance pour vos idées.