首页 > 解决方案 > EF Core 一对一 - 仅针对一条记录返回结果

问题描述

我面临这个问题几个小时,有人可以看看我做错了什么吗?
一对一关系仅返回一条记录的值,如果存在 idCategory = 2 的三个产品,则其中只有一个具有类别。我什至尝试过使用 CategoryId 而不是 idCategory,但仍然无法正常工作。

使用 EF Core 3.1.5 和 .NET Core 3.1,降级版本不能正常工作。

在产品类别中:

public int idCategory { get; set; }

[ForeignKey("idCategory")]
public virtual Category Category { get; set; }

在类别类中:

public virtual Product Product { get; set; }

此外,我无法将具有相同 idCategory 的 Products 中的两条记录添加到 DB 中,因此我插入了 OnModelCreating:

builder.Entity<Product>().HasIndex(e => e.idCategory).IsUnique(false);

和流畅的 API:

builder.Entity<Category>()
.HasOne<Product>(b => b.Product)
.WithOne(i => i.Category)
.HasForeignKey<Product>(b => b.idCategory);

在控制器中:

[HttpGet]
[Route("products")]
public IEnumerable<Product> GetProducts()
{
    return products.GetProducts();
}

在产品存储库中:

public IEnumerable<Product> GetProducts()
{
    return context.Products.Include(x => x.Category)
        .Where(x => x.Category.IsActive == true && x.IsActive == true).ToList();
}

在配置服务中:

services.AddControllers().AddNewtonsoftJson(options =>
    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);

结果: JSON 结果 - 照片

^ 延迟加载也会发生同样的事情,但是第一条记录具有类别值,而第二条则没有

标签: asp.net-coreentity-framework-core

解决方案


你确定不是一对多的关系吗?如果我理解正确,您只想返回产品的类别,为什么不在“产品”类中添加此属性“CategoryId”并创建一个包含所有类别的其他类“类别”。像这样的东西:

类产品

public virtual Product Product { get; set; }
public Categories CategoryId { get; set; }

班级类别

public int Id { get; set; }
public ICollection<Product> Product {get; set;}

像这样,您可以为记录的每个产品添加一个类别。

您可以查看有关 Access Data 的 ASP Net Core 3.1 文档:

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/complex-data-model?view=aspnetcore-3.1


推荐阅读