如果在相同的dbcontext期间操作,则实体框架兑现列表

时间:2015-10-19 14:04:30

标签: c# entity-framework

我有一个最奇怪的问题。当我在ToList()集合上IQueryble时,集合中的括号(以及括号内的内容)会被神秘地删除。

    public IEnumerable<SurveyQuestion> GetByPeriodId(int peridId)
    {
        IQueryable<SurveyQuestion> list = Find(x => x.PeriodId == peridId);

        var items = list.ToList();

        return items;
    }

list包含以下sql语句

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Question] AS [Question], 
[Extent1].[SurveyAnswerTypeId] AS [SurveyAnswerTypeId], 
[Extent1].[ReportQuestionId] AS [ReportQuestionId], 
[Extent1].[SurveyTemplateQuestionId] AS [SurveyTemplateQuestionId], 
[Extent1].[PeriodId] AS [PeriodId], 
[Extent1].[MaxPoint] AS [MaxPoint]
FROM [dbo].[SurveyQuestion] AS [Extent1]
WHERE [Extent1].[PeriodId] = 1062

其中一个问题栏目包含

&#34;以下是一些事情:[汽车,刀具,房子]&#34;

但在对集合执行ToList()后,字符串将更改为

&#34;以下是一些事情:&#34;

这是怎么回事?!

2 个答案:

答案 0 :(得分:0)

当您对可查询ToList()执行执行查询时。即SQL查询被发送到数据库服务器,在那里执行查询,结果被下载并映射到内存中的实体。并获得SurveyQuestion个实体的列表(如果SQL查询有一些结果)。如果要将查询结果转储到字符串,可以迭代它们并将每个对象保存为字符串,也可以序列化结果。例如。得到问题:

string questions = String.Join(Environment.NewLine, items.Select(i => i.Question));

或者您可以迭代项目并阅读他们的问题

foreach(var item in items)
{
   string question = item.Question;
   // ...
}

答案 1 :(得分:0)

我想出了这个。问题是实体框架正在兑现清单items,因为这是在同一DbContext期间被操纵的。因此它没有使用数据库中的项填充列表。它保留了旧的,更改的列表。

如果你使用它很好,但如果你(像我一样)不期望这种行为会让你感到困惑。