【发布时间】:2011-05-04 21:15:22
【问题描述】:
这是我的情况,非常简单。
我的课;
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");
}
这工作正常,但鉴别器列默认为鉴别器,NVARCHAR(128)。我读到可以使用如下内容自己定义此列。
m.Requires("ClassType").HasValue(1);
我彻底改变了我的可能性,但总是陷入死胡同。 任何人有建议如何做?
我将以另一个问题结束。由于我们的层次结构几乎与上述相同,但还有更多派生类,如 C、D、E、F 等等……比如说 P。我们发现 EF 正在执行这个令人难以置信的大数据库查询(~150K)。其他人遇到过这种情况吗?
我希望通过更改鉴别器至少可以最小化这种情况。我说我们有一个非常整洁的类层次结构,但查询集很丑。
【问题讨论】:
标签: c# ef-code-first code-first entity-framework-4.1