繁体   English   中英

EF代码优先。 相关实体未加载

[英]EF Code First. Related Entity is not loading

我有实体框架代码第一实体:

public class Customer
{
   public long Id { get; set; }
   public ICollection<ServiceAccount> Accounts { get; set; }
}

public class Service
{
   public long Id { get; set; }
}

public class ServiceAccount
{
   public long Id { get; set; }
   public Customer Customer { get; set; }
   [Required()]
   public Service Service { get; set; }
}

假定客户有一些服务帐户。 但是可以有一些默认帐户,它们不受任何客户的约束。 每个帐户都用于具体服务。 该实体具有以下配置:

// Customer Configuration:
base.ToTable("Customers");
base.HasKey(x => x.Id);
base.HasMany(x => x.ServiceAccounts)
    .WithOptional(x => x.Customer)
    .WillCascadeOnDelete();
// For Service:
base.ToTable("Services");
base.HasKey(x => x.Id);
// For Account:
base.ToTable("Accounts");
base.HasKey(x => x.Id);
base.HasOptional(x => x.Customer)
    .WithMany(x => x.Accounts);
base.HasRequired(x => x.Service)
    .WithMany();

问题是,当我加载一个客户时,他的所有帐户也都被加载了,但是他们的服务设置为空。 为什么不加载?

提前致谢

您需要加载实体。 根据您的评论:

IQueryable<Customer> customers = Customers.Include(x => x.Accounts.Select(y => y.Service));

如果您想要代理进行延迟加载,它们也应该是virtual ...但是对于急于加载的用户则没有必要

延迟加载相关实体需要框架为您的实体创建代理。 尝试将导航属性设置为虚拟:

public class ServiceAccount
{
   public long Id { get; set; }
   public virtual Customer Customer { get; set; }
   [Required]
   public virtual Service Service { get; set; }
}

另外,可以通过Include急于加载属性,甚至可以通过Load显式加载它们。

有关更多信息,请参见https://msdn.microsoft.com/zh-cn/data/jj574232.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM