Esta es mi situación, muy simplificada.Cambiar la columna discriminator a int en Entity Framework 4.1
Mis clases;
public class ClassBase
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
public class ClassMiddle1 : ClassBase
{
}
public class ClassMiddle2 : ClassBase
{
public Guid Token { get; set; }
}
public class ClassA : ClassMiddle1
{
public string UserId { get; set; }
public string Username { get; set; }
}
public class ClassB : ClassMiddle2
{
public string Username { get; set; }
}
Y mi OnModelCreating;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ClassBase>()
.Map(m => {
m.Properties(p => new { p.Id});
m.ToTable("TableBase");
});
modelBuilder.Entity<ClassMiddle1>()
.Map<ClassMiddle1>(m =>
{
m.Properties(p => new { });
m.ToTable("TableBase");
});
modelBuilder.Entity<ClassMiddle2>()
.Map<ClassMiddle2>(m =>
{
m.Properties(p => new { p.Token });
m.ToTable("TableBase");
});
modelBuilder.Entity<ClassA>()
.Map<ClassA>(m =>
{
m.Properties(p => new
{
p.UserId,
p.Username
});
m.ToTable("TableA");
});
modelBuilder.Entity<ClassB>()
.Map<ClassB>(m =>
{
m.Properties(p => new
{
p.Username
});
m.ToTable("TableB");
}).Property(p => p.Username).HasColumnName("User");
}
Esto funciona bien, pero la columna discriminadora es por defecto discriminador, nvarchar (128). Leí que es posible definir esta columna yo mismo usando algo como a continuación.
m.Requires("ClassType").HasValue(1);
Volví a dar vueltas a mis posibilidades, pero a todas luces me encontré con un callejón sin salida. ¿Alguien tiene una sugerencia de cómo hacerlo?
Terminaré con otra pregunta. Como nuestra jerarquía es bastante parecida a la anterior, pero aún hay más clases derivadas como C, D, E, F y ... digamos P. Descubrimos que EF está haciendo esta consulta de base de datos increíblemente grande (~ 150K). ¿Alguien más se encontró con este escenario?
Tengo la esperanza de cambiar Discriminator para al menos minimizar esto. Por eso digo que tenemos una jerarquía de clases muy ordenada pero un conjunto de consultas feo.