在实体框架4.1中将discriminator列更改为int

Per*_*Per 5 c# code-first ef-code-first entity-framework-4.1

这是我的情况,非常简化.

我的课程;

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; }
}
Run Code Online (Sandbox Code Playgroud)

而我的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");

}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但Discriminator列默认为Discriminator,NVARCHAR(128).我读到可以使用下面的内容自己定义此列.

m.Requires("ClassType").HasValue(1);
Run Code Online (Sandbox Code Playgroud)

我把自己的可能性彻底改变了,但所有时间都陷入了死胡同.有人建议怎么做?

我将以另一个问题结束.由于我们的层次结构几乎与上面相同,但是更多的衍生类如C,D,E,F等等......说P.我们发现EF正在进行这个令人难以置信的大数据库查询(~150K).其他人遇到过这种情况?

我希望改变Discriminator至少最小化这个.据我所知,我们有一个非常整洁的类层次结构,但丑陋的查询集.

Per*_*Per 5

迟回答实际解决方案是如何进行的.只在这里写下来,因为围绕这个的文档并不那么容易找到.

我的解决方案最终如下...

modelBuilder.Entity<ClassBase>()
        .Map(m => {
            ...
            m.Requires("Discriminator").HasValue(1)
        });
Run Code Online (Sandbox Code Playgroud)