c# - 如何使用 mvc4 C# 在我的 linq 中将多个表包含到实体急切加载中

标签 c# asp.net-mvc entity-framework eager-loading

我有 6 个类,我尝试对实体使用 linq 来获取最后一个更深表(在 View - MVC 中)的 SiglaUF 信息。问题是我收到以下错误:

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

View 是这样的:

>     @model IEnumerable<DiskPizzaDelivery.Models.EnderecoCliente>
>     @foreach (var item in Model) {
>          @Html.DisplayFor(modelItem => item.CEP.Cidade.UF.SiglaUF)
>     }

我使用的查询:

 var cliente = context.Clientes
       .Include(e => e.Enderecos)
       .Include(e1 => e1.Enderecos.Select(cep => cep.CEP))
       .SingleOrDefault();

问题是:如何改进此查询以预加载(预加载)“Cidade”和“UF”?

参见下面的类:

public partial class Cliente
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int IdCliente { get; set; }
        public string Email { get; set; }
        public string Senha { get; set; }
        public virtual ICollection<EnderecoCliente> Enderecos { get; set; }
    }
public partial class EnderecoCliente
    {
        public int IdEndereco { get; set; }
        public int IdCliente { get; set; }
        public string CEPEndereco { get; set; }
        public string Numero { get; set; }
        public string Complemento { get; set; }
        public string PontoReferencia { get; set; }
        public virtual Cliente Cliente { get; set; }
        public virtual CEP CEP { get; set; }
    }
public partial class CEP
    {
        public string CodCep { get; set; }
        public string Tipo_Logradouro { get; set; }
        public string Logradouro { get; set; }
        public string Bairro { get; set; }
        public int CodigoUF { get; set; }
        public int CodigoCidade { get; set; }
        public virtual Cidade Cidade { get; set; }
    }
public partial class Cidade
    {
        public int CodigoCidade { get; set; }
        public string NomeCidade { get; set; }
        public int CodigoUF { get; set; }
        public virtual ICollection<CEP> CEPs { get; set; }
        public virtual UF UF { get; set; }
        public virtual ICollection<UF> UFs { get; set; }
    }
public partial class UF
    {
        public int CodigoUF { get; set; }
        public string SiglaUF { get; set; }
        public string NomeUF { get; set; }
        public int CodigoCidadeCapital { get; set; }
        public virtual ICollection<Cidade> Cidades { get; set; }
        public virtual Cidade Cidade { get; set; }
    }

var cliente = context.Clientes
                .Where(c => c.Email == email)
                .Where(c => c.Senha == senha)
                .Include(e => e.Enderecos)
                .Include(e1 => e1.Enderecos.Select(cep => cep.CEP))
                .SingleOrDefault();

谢谢!

最佳答案

您可以简单地包含整个导航路径。

 var cliente = context.Clientes
       .Include(e => e.Enderecos)
       .Include(e1 => e1.Enderecos.Select(cep => cep.CEP.Cidade.UF))
       .SingleOrDefault();

关于c# - 如何使用 mvc4 C# 在我的 linq 中将多个表包含到实体急切加载中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19671768/

相关文章:

javascript - 取消输入时提交

c# - 检索功能区对象引用的 "proper"方法是什么?

如果连接失败,C# 总是重试 tcp 连接

c# - 使用 TypedParameter 的 Autofac Resolve 总是首先选取预期的相同类型参数?

c# - 以编程方式从 Entity Framework 6 的对象上下文中获取有关索引和约束的元数据

asp.net-mvc - 存储库模式 : good or bad?

asp.net-mvc - 如何在 ASP.NET MVC 应用程序中对 'Azure AD and OpenID Connect' 代码进行单元测试

ASP.NET MVC : First access after some minutes slow, 然后每个后续请求都很快

entity-framework - 使用 LINQ 和 Entity Framework 添加前导零

mysql - Entity Framework 逆向工程代码优先可以与 MySql 一起使用吗?