返回实体框架查询的结果

时间:2018-01-07 13:39:47

标签: c# entity-framework

我遇到了在数据访问层方法中返回DbContext查询结果的问题。我这样做:

public IEnumerable<Person> GetAllPeople()
{
    IEnumerable<Person> people;

    using (var context = new AdressingContext())
    {
        people = context.People.ToList();
    }

    return people;
} 

当我想在Main中打印输出时:

class Program
{
    static void Main(string[] args)
    {
        ContactsRepository repository = new ContactsRepository();
        var people = repository.GetAllPeople();

        foreach (var item in people)
        {
            Console.WriteLine(item);
        }

        Console.ReadKey();
    }
}

抛出异常

  

由于已经处理了DbContext,因此无法完成操作。

我知道在使用块结束时,内部创建的对象会被处理掉,但不应该

people = context.People;

复制那些对象?你能提出一个优雅的方法来解决这个问题吗?

编辑:Person.ToString()语句中if()抛出异常。

  

ObjectContext实例已被释放,不能再用于需要连接的操作。

public override string ToString()
{
    if (ContactInformation == null)
    {
        return $"PersonId={PersonId}, FirstName={FirstName}, LastName={LastName}, Sex={Sex}, Birthday={Birthday}, Description: {Description}";
    }

    return $"PersonId={PersonId}, FirstName={FirstName}, LastName={LastName}, Sex={Sex}, Birthday={Birthday}, Contact: {ContactInformation.ToString()}, Description: {Description}";
} 

1 个答案:

答案 0 :(得分:1)

您启用了延迟加载,并且您从导航属性(另一个表)获取信息。因此,当您访问它时,它会尝试加载该数据,但您已经处理了上下文。使用.include或关闭延迟加载。

相关问题