Comment obtenir d'abord le code Entity Framework 4.3 pour cartographier une sous-classe à l'aide de la table par type (TPT)?

StackOverflow https://stackoverflow.com/questions/9511021

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?

Était-ce utile?

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
scroll top