Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架4.1中将鉴别器列更改为int_C#_Ef Code First_Code First_Entity Framework 4.1 - Fatal编程技术网

C# 在实体框架4.1中将鉴别器列更改为int

C# 在实体框架4.1中将鉴别器列更改为int,c#,ef-code-first,code-first,entity-framework-4.1,C#,Ef Code First,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

这是我的情况,非常简单

我的班级

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; }
}
以及我对模型的创建

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");

}
我把我的可能性翻了个底朝天,但总是陷入死胡同有人建议怎么做吗?

我将以另一个问题结束。因为我们的层次结构和上面的差不多,但是更多的派生类,比如C,D,E,F等等,都是为了。。。我们发现EF正在进行一个非常大的数据库查询(~150K)。还有其他人遇到过这种情况吗

我希望通过更改鉴别器,至少可以将此最小化。我要说的是,我们有一个非常整洁的类层次结构,但有一个丑陋的查询集

关于您的“超大数据库查询”:确实有。这些问题似乎仍然没有解决办法,只有这一模糊的声明(2010年8月):

好消息是我们正在工作 在这些问题上,EF不再 生成不必要的SQL。坏的 消息是这需要一些时间 在修复程序以 未来版本


(引用上面链接的文章。)

请稍后回答实际解决方案的进展情况。只是写在这里,因为这方面的文档不太容易找到

我的解决方案如下所示

modelBuilder.Entity<ClassBase>()
        .Map(m => {
            ...
            m.Requires("Discriminator").HasValue(1)
        });
modelBuilder.Entity()
.Map(m=>{
...
m、 需要(“鉴别器”)。HasValue(1)
});
modelBuilder.Entity<ClassBase>()
        .Map(m => {
            ...
            m.Requires("Discriminator").HasValue(1)
        });