【发布时间】:2012-11-26 04:40:28
【问题描述】:
假设我有一个 Parent 类,它有两个子类 AChild 和 BChild。我使用 .NET 4.5 上的 Entity Framework 5.0.0 使用 TPH 将这些映射到单个表。
public abstract class Parent {
public string Type { get; set; } // Column with this name in DB is discriminator.
public string Status { get; set; }
}
public class AChild : Parent {
// Other stuff.
}
public class BChild : Parent {
// Other stuff.
}
配置映射的代码:
class ParentConfiguration : EntityTypeConfiguration<Parent> {
Map((EntityMappingConfiguration<AChild> mapping) => mapping
.Requires("Type")
.HasValue("A"));
Map((EntityMappingConfiguration<BChild> mapping) => mapping
.Requires("Type")
.HasValue("B"));
}
我需要运行一个返回 AChild 和 BChild 对象的查询。但是,它只需要按第二列过滤 AChild 行,在本例中我将其称为 Status。
理想情况下,我想做以下事情:
public IList<Parent> RunQuery() {
IQueryable<Parent> query =
this.context.Set<Parent>()
.Where((Parent parent) => !parent.Type.Equals("A") || parent.Status.Equals("Foo"))
.OrderBy((Parent parent) => parent.Number);
return query.ToList();
}
这不起作用。它坚持寻找“Type1”列,而不是让鉴别器和“Type”属性都映射到同一个“Type”列。
我知道“OfType”扩展方法可以用来完全过滤到一种类型,但在这种情况下这太宽泛了。
我可能会运行多个查询并合并结果,但我正在构建的实际系统正在执行分页,所以如果我需要拉回 10 行,查询会变得混乱(而且效率低下),因为我要么最终拉回太多行,或者拉回不够,不得不运行额外的查询。
还有人有其他想法吗?
【问题讨论】:
标签: entity-framework entity-framework-4.1 entity-framework-5