我有一个名为 Person 的实体,它有一组地址。
我创造了:
public partial class Person
{
public int AddressCount{get{return Addresses.Count;}}
}
这会返回错误:
ObjectContext 实例已被释放,不能再用于需要连接的操作。
我正在返回一个人的集合,我怎么能不这样做呢:
public int AddressCount
{
get
{
using (var c = new Entities())
{
return c.People.Where(s => s.PersonId == PersonId).Single().Addresses.Count;
}
}
}
最佳答案
我发现这可以在不加载集合中所有实体的情况下预先加载“计数”属性:
using (var context = new Entities())
{
var people = (from p in c.People
select new
{
Person = p,
AddressCount = p.Addresses.Count
}).ToList();
foreach (var item in people)
{
item.Person.AddressCount = item.AddressCount;
}
}
当然,缺点是 AddressCount 需要可设置。我想如果您的上下文与实体类在同一个程序集中,您可以给它一个内部 setter 。
您可能不需要那里的 Include("Addresses")
- 这值得测试。 编辑 删除了它,因为它不是必需的(并且实际上可能使查询做比它必须做的更多的工作)。
关于C# Entity Framework 填充部分属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857742/