我遇到了在数据访问层方法中返回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}";
}
答案 0 :(得分:1)
您启用了延迟加载,并且您从导航属性(另一个表)获取信息。因此,当您访问它时,它会尝试加载该数据,但您已经处理了上下文。使用.include或关闭延迟加载。