【发布时间】:2019-10-14 03:45:36
【问题描述】:
我是否需要为使用 Entity Framework 的每个外键对象添加一个整数 PropertyId,在示例中为 UserId? NHibernate 会自动处理这个问题,我想知道是否有任何方法可以解决这个问题,只使用对象而不是每次添加新寄存器时都从数据库中检索它。
我尝试了插入,只是定义:
// It's complaining about required user fields
var newMenu = new Menu { Name = "test", User = new User { Id = 1 }};
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(100)]
public string Name { get; set; }
[Required]
[MaxLength(100)]
public string Email { get; set; }
[Required]
[MaxLength(30)]
public string Password { get; set; }
[Required]
public bool Active { get; set; }
}
public class Menu
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(100)]
public string Name { get; set; }
[Required]
public User User { get; set; }
[Required]
public bool Active { get; set; }
}
【问题讨论】:
-
如果没有这样的属性,你将如何编写一个查询来通过用户 ID 获取所有菜单?
-
menus.Where(m => m.User.Id == 1); -
这是否意味着对菜单的查询将始终加载并包含相关的用户数据?
-
在这种情况下是的,但即使它不是非空字段,我也可以使用
menus.Where(m => m.User?.Id == 1);而不会出现错误
标签: c# .net entity-framework asp.net-core