【发布时间】:2012-08-21 23:15:57
【问题描述】:
需要在 EF 4.1 中构建各种标记系统,允许查询每个标签的所有实体,或每个实体的所有标签。这是我的模型的简短快照:
public abstract class BaseEntity {
[Required]
[Key]
public Guid ID { get; set; }
}
public class Tag : BaseEntity {
// tag subscribers
public List<King> Kings { get; set; }
public List<Knight> Knights { get; set; }
public List<Peasant> Peasants { get; set; }
}
public class King : BaseEntity {
public string Title { get; set; }
public List<Tag> Tags { get; set; }
}
public class Knight : BaseEntity {
public string Title { get; set; }
public List<Tag> Tags { get; set; }
}
public class Peasant : BaseEntity {
public string Title { get; set; }
public List<Tag> Tags { get; set; }
}
(是的,我知道国王、骑士和农民在这里是一样的。但正如信使在巨蟒与圣杯中所说:“这只是一个模型。”)
所以无论如何,这个模型工作得很好,但我更喜欢 T 通用列表,而不是特定的演员表。数据库中的表更少,从标签到实体查询时的开销更少。如何将 Tag 中的所有 List
List<Knight> knightsByTag = Tags.Where(t => t.GetType() == typeof (Knight)).ToList();
编辑: 是的。抱歉,里面还有一些实际的代码。
@DarthVader:
- 希望 Tag 使用一个 List 属性,而不是当前的三个 List 属性。
- 希望能够查询与骑士关联的所有标签,或与标签关联的所有农民等。
- 希望确保 EF CodeFirst 能够准确解析通用列表,最好使用查找表。
【问题讨论】:
-
你能澄清和简化你的问题吗?你想查询什么?
Tags没有您定义的Knight。你怎么写最后一个查询?
标签: c# .net generics entity-framework-4 ef-code-first