簡體   English   中英

一對一關系不會同時包含兩個類

[英]One-to-one relationship does not carry both classes

我正在使用實體框架來持久化並檢索一些信息,我之間存在一對一的關系。 產品和類別,其中一個產品具有一個類別,一個類別可能具有多個產品。

我有以下結構

我創建了兩個實體並建立了關系,但是當我檢索此信息時,它帶給我產品的信息,但是類別為nu​​ll

Produto.cs

public class Produto 
{
    [Key]
    public int id { get; set; }
    public string descricao { get; set; }
    public string observacao { get; set; }
    public int status { get; set; }
    public decimal valorVenda { get; set; }
    public virtual Categoria categoria { get; set; }
}

Categoria.cs

public class Categoria 
{
    [Key]
    [ForeignKey("categoriaid")]
    public int id { get; set; }
    public string descricao { get; set; }
    public string observacao { get; set; }
    public int status { get; set; }
    public virtual Produto produto { get; set; }
}

ProdutoContexto.cs

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

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Produto>()
            .HasOne(a => a.categoria)
            .WithOne(b => b.produto)
            .HasForeignKey<Categoria>(b => b.id);
    }

    public DbSet<Produto> Produtos { get; set; }
}

CategoriaContexto.cs

public class CategoriaContexto : DbContext 
{
    public CategoriaContexto(DbContextOptions<CategoriaContexto> options) : base(options)
    {
    }
    public DbSet<Categoria> Categorias { get; set; }
}

當我運行該函數以檢索信息時,將返回以下json

[{"id":1,"descricao":"Coca-Cola","observacao":"Coca-Cola Gelada","status":1,"valorVenda":5.50,"categoria":null}]

我的查詢是:

[HttpGet] 
public async Task<ActionResult<IEnumerable<Produto>>> GetProdutos() 
{ 
   return await _context.Produtos.ToListAsync(); 
}

請注意,類別為nu​​ll,如何以已經加載類別的方式完成?

類別可能有幾個產品。

然后它不是one-to-one ,而是one-to-many並且您的模型類應如下所示:

public class Categoria 
{
    [Key]
    public int id { get; set; }
    public string descricao { get; set; }
    public string observacao { get; set; }
    public int status { get; set; }

    public virtual ICollection<Produto> produtos { get; set; }
}

public class Produto 
{
    [Key]
    public int id { get; set; }

    [ForeignKey("categoria")]
    public int categoriaId {get; set;}

    public string descricao { get; set; }
    public string observacao { get; set; }
    public int status { get; set; }
    public decimal valorVenda { get; set; }

    public virtual Categoria categoria { get; set; }
}

而且您不需要任何FluentAPI配置。 因此,刪除modelBuilder.Entity<Produto>()配置。 而且你也不需要為兩個不同的DbContext ProdutoCategoria分開。 而是使您的DbContext如下所示:

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

    public DbSet<Categoria> Categorias { get; set; }
    public DbSet<Produto> Produtos { get; set; }
}

您的查詢應如下所示:

[HttpGet] 
public async Task<ActionResult<IEnumerable<Produto>>> GetProdutos() 
{ 
   return await _context.Produtos.Include(p => p.categoria).ToListAsync(); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM