【发布时间】:2017-11-23 01:19:11
【问题描述】:
我有两节课
public class TypeA
{
public Guid Id { get; set; }
public List<Comment> Comments { get; set; }
}
public class TypeB
{
public Guid Id { get; set; }
public List<Comment> Comments { get; set; }
}
然后是
public class Comment
{
public Guid Id { get; set; }
public Guid ParentId { get; set; } //foreign key either to TypeA or TypeB
public int Type { get; set; } //shows which class is referenced by foreign key ParentId
}
Comment 具有 TypeA 或 TypeB 的外键。还有一个属性Type,它告诉我们引用了哪个外键。
现在我就去做
_context.Set<TypeA>().Include(x => x.Comments).First(x => x.Id == Id)
但是是否可以限制Include 语句或编写一个查询来检查Type 属性以获取适当的外键引用,例如
_context.Set<TypeA>().Include(x => x.Comments.Where(c=>c.Type == 1)).First(x => x.Id == Id)
我想这可以在查询中对Comments 进行分组时完成,但是TypeA 和TypeB 有许多属性,我想避免在select 语句中写new 关键字来分配所有属性.
编辑:
我对我现在所拥有的非常满意。我这样做是为了理智,以防TypeA 和TypeB id 属性相同(99.9999999 不会)。
【问题讨论】:
-
请给您的问题一个有意义的标题。并尝试通过“过滤包含”找到一些帖子。不支持。
-
是写一个选择的存储过程,并使用EF调用它。但 EF 本身没有?
-
出于好奇,为什么会有两种看起来一模一样的类型?拥有一个带有 Type 字段的类不是更有意义吗?我非常希望您的代码只是一个不完整的示例。
-
不,这只是非常小的样本,TypeA 和 TypeB 在结构和用途上都是不同的类。他们恰好有相同的班级
Comment。为CommentForTypeA和CommentForTypeB设置两个表是没有意义的。 -
@MantasČekanauskas 嘿!你是怎么解决这个问题的。我在这里遇到了类似的问题,我想我把整个映射弄错了。你能帮我看看吗? stackoverflow.com/questions/56584027/…
标签: c# entity-framework foreign-keys