asp.net-mvc - Entity Framework 不返回相关对象

标签 asp.net-mvc entity-framework asp.net-core

所以我试图将两个表相互关联。我有一个产品表和一个图像表。我在产品对象中有一个图像集合,在图像对象/表中有一个产品 ID,但是当它获取产品对象时,图像集合是空的。

现在有趣的是,在调试时,如果我在产品对象从中提取信息之前检查上下文元素,它会在上下文元素中加载图像,然后将其分配给产品。因此,它仅在我手动检查上下文元素并搜索图像时才有效。

产品

public class Product
    {
        public int Id { get; set; }
        public string FriendlyUrl { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public double? Price { get; set; }
        public double? Weight { get; set; }
        public int? Stock { get; set; }
        public virtual ICollection<Image> Images { get; set; }
    }

图片

public class Image
    {
        public int Id { get; set; }
        public int ProductId { get; set; }
        public string FileName { get; set; }
    }

DBContext

 public class TheContext : DbContext
    {
        public TheContext(DbContextOptions<TheContext> options) : base(options)
        {

        }

        public DbSet<Product> Products { get; set; }
        public DbSet<Image> Images { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>().HasMany<Image>(s => s.Images);
        }
    }

数据访问

public Product GetById(string id)
        {
            Product product = _context.Products.FirstOrDefault(p => p.FriendlyUrl == id);
            return product;
        }

最佳答案

您需要加载相关实体,在您的情况下是图像:

数据访问

public Product GetById(string id)
{
    Product product = _context.Products.include(p => p.Images)
                              .FirstOrDefault(p => p.FriendlyUrl == id);
    return product;
}

在此处了解有关加载相关实体的更多信息:https://msdn.microsoft.com/en-us/library/jj574232

此外,您希望通过使用工厂或在需要的地方实例化上下文来尽快处理上下文,以避免内存泄漏。

数据访问

public Product GetById(string id)
{
    using(var context = new TheContext())
    {
        product = context.Products.include(p => p.Images)
                         .FirstOrDefault(p => p.FriendlyUrl == id);
        return product;
    }
}

不要使字段变量中的上下文保持事件状态。

在此处了解有关生命周期的更多信息:https://msdn.microsoft.com/en-us/data/jj729737

关于asp.net-mvc - Entity Framework 不返回相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643238/

相关文章:

c# mvc 从字符串名称动态创建 Controller - eval?

javascript - ASP.NET MVC 验证 : result in a javascript property?

javascript - 如何在 MVC 中实现 <ul> nav-tabs 使其表现得像 <a data-toggle ="tab"href ="#">?

c# - 在 foreach/for 中构建 where 子句的延迟查询

c# - ASP.NET 5 在 Startup 类中的ConfigureServices 中访问上下文或请求信息

asp.net - IIS 未运行 ASP.NET MVC 应用程序

c# - 我如何首先使用带有 ef 代码的 wcf 数据服务公开 dto 对象?

c# - 自数据库创建以来支持 'MyContext' 上下文的模型已更改

c# - 将方法添加到 Core 2.1 中现有的 Microsoft.Extensions.Logging.LoggerExtensions

asp.net-core - 使用路由参数读取 Asp.Net Core MVC 操作中的原始 Request.Body