当前位置 : 主页 > 手机开发 > 其它 >

entity-framework – 使用实体框架继承的瓶颈

来源:互联网 收集:自由互联 发布时间:2021-06-19
所以首先我的实体 问题我想要一个包含所有故事标题及其类型的页面 有三个故事LongStory,CoOpStory,GenericStory 通用故事与故事类型相关联,用于通用故事的类型 我有两个问题 首先,当我想检
所以首先我的实体

问题我想要一个包含所有故事标题及其类型的页面

有三个故事LongStory,CoOpStory,GenericStory

通用故事与故事类型相关联,用于通用故事的类型

我有两个问题

首先,当我想检查故事是LongStory还是CoOpStory我必须得到所有实体并检查实体类型,如果它是LongStory然后做某事,我不知道如何检索一些数据[只有标题]并检查类型

我的第二个问题就像我说我想要一个包含所有故事标题及其类型的页面我不知道如何在不进行大量查询的情况下做到这一点,我无法连接到StoryType表,因为它必须是GenericStory与之关联,所以我先做了所有的故事,然后为每个GenericStory做一个额外的查询来获得类型

您正在寻找OfType和Concat扩展方法.

要获得只有LongStory实例,您只需要调用:

var longStories = context.Stories.OfType<LongStory>().ToList();

为了获得更大的查询,它有点复杂.你可以尝试:

var allStories = context.Stories
                        .OfType<GenericStory>()
                        .Include("StoryType") // I'm not sure how this works with concat
                        .Concat(
                             context.Stories.OfType<LongStory>.Concat(         
                                  context.Stories.OfType<CoOpStory>()));

或者你可以做一个投影:

var allStories = context.Stories
                        .OfType<GenericStory>()
                        .Select(s => new { s.Title, s.StoryType.Name })
                        .Concat(
                             context.Stories
                                    .OfType<LongStory>
                                    .Select(s => new { s.Title, "LongStory" })
                                    .Concat(         
                                        context.Stories
                                               .OfType<CoOpStory>()
                                               .Select(s => new { s.Title, Type })));
网友评论