這是我的情況,非常簡化。將辨別器列更改爲實體框架中的int 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; }
}
And my 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等等......我們發現EF正在製作這個令人難以置信的大數據庫查詢(〜150K)。其他人遇到這種情況?
我希望改變Discriminator,至少將其最小化。據我所說,我們有一個非常整齊的類層次結構,但一個醜陋的查詢集。