Comment obtenir d'abord le code Entity Framework 4.3 pour cartographier une sous-classe à l'aide de la table par type (TPT)?
-
14-11-2019 - |
Question
J'utilise d'abord le code EF 4.3 et les migrations automatiques. J'ai les 3 classes suivantes:
public class BaseUser
{
[Key]
[MaxLength(50)]
public string Username { get; set; }
[MaxLength(200)]
public string Password { get; set; }
}
public class AdminUser : BaseUser
{
public int SettingsFlag { get; set; }
}
public class RegularUser : BaseUser
{
public DateTime LastLogin { get; set; }
public DateTime LastSummary { get; set; }
[MaxLength(100)]
public string Email { get; set; }
public int CompanyID { get; set; }
public int ContactID { get; set; }
}
Lorsque j'exécute des database de mise à jour à ce sujet, il utilise TPH (Table-Per-Hierarchy) pour créer une seule table pour les 3, fusionnant toutes ces propriétés ensemble et en ajoutant une colonne de discriminatrice.
Comment puis-je m'assurer de me retrouver avec 3 tables?
La solution
L'astuce s'avère assez simple - nommez explicitement chaque table et EF le figure seul, y compris la création de la relation FK:
[Table("BaseUser")]
public class BaseUser
...
[Table("AdminUser")]
public class AdminUser : BaseUser
...
[Table("RegularUser")]
public class RegularUser : BaseUser
Cela m'amène les 3 tables avec une jointure FK un à un comme prévu.
Autres conseils
Si vous préférez l'API CLUENT, vous pouvez créer un mappage TPT en utilisant la méthode Totable ():
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AdminUser>().ToTable("AdminUser");
modelBuilder.Entity<RegularUser>().ToTable("RegularUser");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow