C# Entity Framework 填充部分属性

标签 c# linq entity-framework

我有一个名为 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/

相关文章:

c# - yield 返回与返回选择

asp.net-mvc - Entity Framework 中的字段最大长度

c# - 如何启用 Visual Studio 2015 诊断工具 "Showing events for:"类别和线程筛选器

c# - 如何在结构中声明一个结构数组?

c# - a & b 在 .Aggregate( (a,b) => statement w/a&b) 中代表什么

c# - 在 C# 中使用 linq 计算 IEnumerable 中项目的出现次数

c# - 强制 Entity Framework 使用 datetime 而不是 datetime2

entity-framework - EF - INSERT 语句与 FOREIGN KEY 约束冲突

c# - 我如何知道智能卡是否已插入?

c# - 在电子邮件中发送图表