猿问

Entity Framework Core - ForeingKey 显示空值

我正在使用 ASP.NET Core 开发一个实体框架,我正在 SQL Express 2017 中构建一个数据库,并使用 C# 构建一个 REST API。


我有两个模型(Usuario 和 Alimento):这是我的 Alimento 模型:


public class Alimento{

[Key]

[DatabaseGenerated(DatabaseGeneratedOption.None)]

public int codAl { get; set; }


[Required(ErrorMessage = "Se requiere de una denominacion")]

[StringLength(50, MinimumLength = 2)]

public string Descripcion { get; set; }


public string Cantidad { get; set; }


[Required(ErrorMessage = "Calorias es imprescindible")]

[DataType(DataType.Currency)]

[Range(1, 999, ErrorMessage = "El rango debe estar entre 1 y 999")]

public int Calorias { get; set; }

    }

这是我的 Usuario 模型:


public class Usuario{

public int Id { get; set; }

public string email { get; set; }


[Required(ErrorMessage = "Se requiere de una denominacion")]

[StringLength(50, MinimumLength = 2)]

public string nombre { get; set; }


public Alimento alimento { get; set; }

}

当我迁移解决方案并更新数据库时,我可以在 USUARIO 表中看到属性“alimento”,如“alimentocodAl”。


我正在尝试建模“食物(ALIMENTO)已被用户(USUARIO)吃掉”我有一个控制器,我从特定用户那里获取所有条目,但是当我使用 API 时,我在 USUARIO 表中的 foreing 键( Usuario foreing key to Alimento by codAl) 显示空值,例如:


[{"id":1,"email":"mail","nombre":"nombre","alimento":null}, 

{"id":2,"email":"mail","nombre":"nombre","alimento":null}, 

{"id":3,"email":"mail","nombre":"nombre","alimento":null}]

这是不正确的,因为我的表中的这个列中有值。


执行控制器的代码是:


public IEnumerable<Usuario> GetInfoUsuario(string email)

{

    var user = ctx.usuarios.ToList().Where(b => b.email == email);

    return user;

}

我有什么问题吗?


这是针对使用在 Windows 7 中运行的 ASP.NET 和 Entity Framework Core 开发的 REST API。


白猪掌柜的
浏览 83回答 3
3回答

湖上湖

您仅从&nbsp;Usuario数据库中检索。如果您想获得任何其他信息,您需要使用Include.代替线var user = ctx.usuarios.ToList().Where(b => b.email == email);你需要有var user = ctx.usuarios.Where(b => b.email == email).Include(usr => usr.alimento).ToList();附言我ToList()作为最后一个操作移动,因为它评估表达式。现在它将在检索数据之前过滤表,而不是下载所有用户并在之后过滤。

不负相思意

尝试使用此示例进行映射:public class Usuario{public int Id { get; set; }public string email { get; set; }[Required(ErrorMessage = "Se requiere de una denominacion")][StringLength(50, MinimumLength = 2)]public string nombre { get; set; }[ForeignKey("alimento")]public int AlimentoId {get; set;}public virtual Alimento alimento { get; set; }}public class Alimento{[Key][DatabaseGenerated(DatabaseGeneratedOption.None)]public int codAl { get; set; }[Required(ErrorMessage = "Se requiere de una denominacion")][StringLength(50, MinimumLength = 2)]public string Descripcion { get; set; }public string Cantidad { get; set; }[Required(ErrorMessage = "Calorias es imprescindible")][DataType(DataType.Currency)][Range(1, 999, ErrorMessage = "El rango debe estar entre 1 y 999")]public int Calorias { get; set; }public virtual ICollection<Usario> Users {get; set;}&nbsp; &nbsp; }应该使用上面的代码创建正确的一对多映射。像这样的东西应该从 Usario 表收到。[{"id":1,"email":"mail","nombre":"nombre","AlimentoId":1}]&nbsp;

森林海

您能否尝试将 Alimanto 包含在以下内容中ctx.usuarios.Include(b&nbsp;=>&nbsp;b.alimento)
随时随地看视频慕课网APP
我要回答