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

我的类(class);

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; }
}

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

}

这可以正常工作,但Discriminator列默认为Discriminator NVARCHAR(128)。我读到,可以使用以下类似方法自己定义此列。
m.Requires("ClassType").HasValue(1);

我把自己的可能性彻底搞砸了,但是所有的时间都陷入了死胡同。 任何有建议的人如何做?

我将以另一个问题结束。因为我们的层次结构几乎与上面相同,但是甚至派生了更多的类,例如C,D,E,F等等……P。我们发现EF正在对这个难以置信的大型数据库查询(〜150K)。还有其他人遇到这种情况吗?

我希望更改鉴别器至少可以将其最小化。通过这种方式,我说我们的类层次结构非常整齐,但查询集却很丑陋。

最佳答案

后期回答实际解决方案如何进行。只在这里写下来,因为关于此的文档不​​那么容易找到。

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

modelBuilder.Entity<ClassBase>()
        .Map(m => {
            ...
            m.Requires("Discriminator").HasValue(1)
        });

关于c# - 在 Entity Framework 4.1中将鉴别符列更改为int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5889965/

10-09 02:56