我有这些对象:
public class Domain : EntityTypeConfiguration<Domain>, IEntity
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public Guid Guid { get; set; }
public ICollection<Website> Websites { get; set; }
}
public class Website: EntityTypeConfiguration<Website>, IEntity
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Range(1, int.MaxValue)]
public int DomainId { get; set; }
public string Description { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreationDate { get; set; }
[Required]
public Guid Guid { get; set; }
[Required]
public string LanguageIds { get; set; }
public bool AllowToSharedTemplates { get; set; }
public int PublishWebsiteId { get; set; }
[Required]
public string WebsiteUrl { get; set; }
public virtual Domain Domain { get; set; }
}
当我想要所有网站时,我也想要连接的域名(每个网站都有一个域名)。但不知怎的,这不起作用。
public IList<T> GetAll()
{
IList<T> ret;
using (IocDbContext db = Context.CreateContext())
{
DbSet<T> dbSet = db.Set<T>();
ret = dbSet.ToList();
}
return ret;
}
CreateContext
public IocDbContext CreateContext()
{
IocDbContext rety= new IocDbContext(_siteType.ConnectionString);
rety.Configuration.ProxyCreationEnabled = true;
return rety;
}
如您所见,我有一个通用存储库。只使用一个对象,它可以正常工作,但导航属性不行。使用延迟加载时,它找不到导航属性(在本例中为域)。我收到这个错误:
&#39; ObjectContent`1&#39;类型无法序列化响应正文 内容类型&#39; application / json;字符集= UTF-8&#39;
当我尝试将DTO映射到对象时:
public static Objects.Website ToModel(this Data.Contexts.Website value)
{
if (value == null)
return null;
return new Website
{
Id = value.Id,
Name = value.Name,
Domain = value.Domain?.ToModel()
};
}
答案 0 :(得分:1)
因为您的上下文包含在using
语句中,所以延迟加载将永远不会起作用,因为当您离开GetAll()
方法时,上下文已被处理并且与数据库的连接已被删除闭合。
尽管延迟加载看起来是一个很好的选择,我强烈建议不要使用它,除非你知道你在做什么。显式加载所需的数据要安全得多。