【问题标题】:Entity Framework 7 relationships实体框架 7 关系
【发布时间】:2016-02-12 18:12:08
【问题描述】:

我不太确定我在这里缺少什么。这似乎很简单,但由于某种原因,Category 总是以 null 的形式返回,我在使用 Entity Framework 时总是遇到这些问题。我想弄清楚我做错了什么。产品 ID、产品名称和类别 ID 有数据,但类别始终为空。我正在尝试拉回产品列表以及与产品相关联的类别。

任何帮助将不胜感激。

使用臭名昭著的 Northwind 数据库

[Table("Products")]
public class Products
{
    [Key]
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public int CategoryID { get; set; }
    [ForeignKey("CategoryID")]
    public virtual Categories Category { get; set; }
}

[Table("Categories")]
public class Categories
{
    [Key]
    public int CategoryID { get; set; }
    public string CategoryName { get; set; }
    public virtual ICollection<Products> Product { get; set; }
}

DbContext(相关代码)

public DbSet<Categories> Categories { get; set; } 
public DbSet<Products> Products { get; set; }

这是从我的存储库返回产品的代码

 public IEnumerable<Products> GetAll()
 {
     return _db.Products.AsEnumerable();
 }

【问题讨论】:

  • 您能否提供您使用的用于拉回空类别的查询?
  • @MatthewVerstraete 添加了。
  • return _db.Products.Include("Categories").AsEnumerable();
  • 在顶部使用 System.Data.Entity 导入
  • 使用来自 EntityFramework.Core 的命名空间 Microsoft.Data.Entity 并更改查询 Products.Include(x => x.Category)

标签: c# asp.net-mvc entity-framework


【解决方案1】:

您应该使用来自 EntityFramework.Core 程序集的 Microsoft.Data.Entity 命名空间的扩展方法 Include()。

    using Microsoft.Data.Entity;
    ...
    return _db.Products.Include(p => p.Category).AsEnumerable();

因为 EF7 不支持相关实体的延迟加载,但就像在 EF6 中实现的一样。因此,您需要使用 .Include 方法加载所有相关实体。或许以后会支持。

你可以在这里https://github.com/aspnet/EntityFramework/wiki/Roadmap关注EF7的路线图

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多