C# 实体框架外键
我有两个模型类User和recovernance,recovernance类有一个用户对象的外键,下面是我的两个类:C# 实体框架外键,c#,entity-framework,foreign-key-relationship,C#,Entity Framework,Foreign Key Relationship,我有两个模型类User和recovernance,recovernance类有一个用户对象的外键,下面是我的两个类: public class User { [Key, ScaffoldColumn(false), Display(Name = "ID User")] public int idUser { set; get; } [Required, StringLength(16), Display(Name = "Login")] public strin
public class User
{
[Key, ScaffoldColumn(false), Display(Name = "ID User")]
public int idUser { set; get; }
[Required, StringLength(16), Display(Name = "Login")]
public string login { set; get; }
[Required, StringLength(16), Display(Name = "Password")]
public string password { set; get; }
}
public class Reclamation
{
[Key, ScaffoldColumn(false), Display(Name = "ID Reclamation")]
public int idReclamation { set; get; }
[ForeignKey("idUser")]
public User user{ set; get; }
[Required, Display(Name = "ID Rapporteur")]
public int idUser { set; get; }
[Required, StringLength(30), Display(Name = "Message")]
public string message{ set; get; }
}
例如,假设我有一个idUser=1的用户。当我用idUser=1创建一个新的回收时,它会很好地插入到数据库中,但我的用户对象问题是它不包含idUser=1的用户的信息,我应该在回收类的idUser属性的set属性中手动编写代码,还是缺少一些内容?您应该尝试以下代码:
UserData.Include("Reclamation").ToList();
您应该尝试以下代码:
UserData.Include("Reclamation").ToList();
您可以向实体类添加虚拟属性以启用延迟加载。通过这种方式,您将启用EF在请求时加载相关对象
public class User
{
[Key, ScaffoldColumn(false), Display(Name = "ID User")]
public int idUser { set; get; }
[Required, StringLength(16), Display(Name = "Login")]
public string login { set; get; }
[Required, StringLength(16), Display(Name = "Password")]
public string password { set; get; }
public virtual Reclamation Reclamation {get; set;}
/*if you have one to many relationship, use Collection<T>
and initialize it in the constructor Reclamations = new Collection<Reclamation>();*/
public virtual Collection<Reclamation> Reclamations {get; set;}
}
您可以向实体类添加虚拟属性以启用延迟加载。通过这种方式,您将启用EF在请求时加载相关对象
public class User
{
[Key, ScaffoldColumn(false), Display(Name = "ID User")]
public int idUser { set; get; }
[Required, StringLength(16), Display(Name = "Login")]
public string login { set; get; }
[Required, StringLength(16), Display(Name = "Password")]
public string password { set; get; }
public virtual Reclamation Reclamation {get; set;}
/*if you have one to many relationship, use Collection<T>
and initialize it in the constructor Reclamations = new Collection<Reclamation>();*/
public virtual Collection<Reclamation> Reclamations {get; set;}
}
您使用的是实体框架吗?是的,我使用的是实体框架您可以从数据库中检索用户对象,然后对其附加回收吗?而不是手动将用户ID添加到新的回收中?你会发现,在EF中使用实体图比手动操作要好。我想我可以这样做,但我想问的是,是否有一种自动方法来代替手动添加实体图。你使用实体框架吗?是的,我使用实体框架。你能从数据库中检索用户对象,然后附加一个数据吗对吗?而不是手动将用户ID添加到新的回收中?你会发现在EF中使用实体图比手动操作更好。我想我可以这样做,但我想问的是,是否有一种自动方式来代替手动添加。它工作得很好,谢谢,但你能为我解释一下为什么没有虚拟财产它就不能工作吗?虚拟在这里扮演什么角色?它是一个规则/约定/实体框架,支持延迟加载。这里的答案有详细的解释。它工作得很好,谢谢,但是你能为我解释一下为什么没有虚拟财产它不工作吗?虚拟在这里扮演什么角色?它是一个规则/约定/实体框架,支持延迟加载。这里的答案有详细的解释。