如何解决“字段列表”中的未知列“a.addresscod_address” - C#
朋友们,它有一个“person”表,它记录了用户的信息。现在我创建了一个“地址”表来存储用户的地址信息。
现在我需要重新组织我的代码,因为我遇到了关系问题。这些是我的文件:
Person.cs
using LojaVirtual.Libraries.Lang;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
namespace LojaVirtual.Models
{
public class person
{
/* PK */
[Key]
public int cod_person { get; set; }
public string name { get; set; }
public DateTime date { get; set; }
public string gender{ get; set; }
.
.
public string email { get; set; }
public string password { get; set; }
public addres addres { get; set; }
[ForeignKey("cod_person")]
public virtual ICollection<order> Order { get; set; }
}
}
地址.cs
using System;
using System.Collections.Generic;
using LojaVirtual.Libraries.Lang;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LojaVirtual.Models
{
public class address
{
[Key]
public int cod_address{ get; set; }
public string { get; set; }
public string neighborhood{ get; set; }
public string city { get; set; }
public string state{ get; set; }
.
.
[ForeignKey("person")]
public int? cod_person { get; set; }
public person person { get; set; }
}
}
LojaVirtualContext.cs
using LojaVirtual.Models;
using LojaVirtual.Models.ProdutoAgregador;
using Pomelo.EntityFrameworkCore.MysqL;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace LojaVirtual.Database
{
public class LojaVirtualContext : DbContext
{
/*
* EF Core - ORM
* ORM -> Bibliteca mapear Objetos para Banco de Dados Relacionais
*/
public LojaVirtualContext(DbContextOptions<LojaVirtualContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<person>()
.HasOne<address>(s => s.address)
.WithOne(ad => ad.person)
.HasForeignKey<address>(ad => ad.cod_person);
}
public DbSet<person> person { get; set; }
public DbSet<order> order{ get; set; }
public DbSet<address> addres { get; set; }
}
}
public List<order> ObterTodosPedidosPorSituacao(string status)
{
return _banco.order
.Include(a => a.order_situation)
.Include(a => a.person)
.ThenInclude(p => p.address)
.Where(a => a.Situation == status).ToList();}
我需要通过person表访问地址表的字段。我相信就是这样,但我收到错误:
MysqL.Data.MysqLClient.MysqLException: '字段列表'中的'未知列'a.addresscod_address'
我也试过:a.person.address,但出现同样的错误。
如果有人可以分析,我很感激。
解决方法
这应该有效:
public List<order> ObterTodosPedidosPorSituacao(string status)
{
return _banco.order
.Include(a => a.order_situation)
.Include(a => a.person)
.ThenInclude(p => p.address)
.Where(a => a.Situation == status).ToList();
}
但我只是猜测,因为并非所有代码都包含在内。如果我能提出一些建议 - 在 c# 中存在严格的 naming convention。这没什么大不了的,但它有助于团队合作:)
编辑:我发现数据注释有其他问题。 [ForeignKey("cod_person")]
- 这是多余的。更改后记得进行数据库迁移。
您的关系配置错误
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>
最后一行的 modelBuilder.Entity<person>()
.HasOne<address>(s => s.address)
.WithOne(ad => ad.person)
.HasForeignKey<person>(ad => ad.cod_person); // <-- problem: ad is person
的类型是 ad
泛型类型参数的类型。你应该这样读 - HasForeignKey
的泛型类型参数是实体类型包含外键。
那么你在这里做什么实质上是配置 HasForeignKey
实体的 PK 也用作 person
的 FK,这使 address
中的预期 FK 无效(因为 fluent配置具有更高的优先级/覆盖约定和数据注释)。
话虽如此,只需通过更改泛型类型参数将 address
映射为一对一关系的依赖实体(具有 FK 的实体):
address
还要考虑删除(并在一般情况下避免).HasForeignKey<address>(ad => ad.cod_person);
属性。根据应用的位置,它们具有不同的语义(在导航属性上指定关联的 FK 属性名称,在 FK 属性上指定关联的导航属性名称)并且很容易像您的情况一样搞砸:
ForeignKey
应该是
[ForeignKey("cod_person")] // <-- wrong,points to self
public int? cod_person { get; set; }
public person person { get; set; }
或
[ForeignKey("person")] // the name of the below navigation property
public int? cod_person { get; set; }
public person person { get; set; }
但正如我之前所说,最好避免使用该属性,并在需要时使用 fluent API 配置关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。