C# 实体框架外键

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

我有两个模型类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 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中使用实体图比手动操作更好。我想我可以这样做,但我想问的是,是否有一种自动方式来代替手动添加。它工作得很好,谢谢,但你能为我解释一下为什么没有虚拟财产它就不能工作吗?虚拟在这里扮演什么角色?它是一个规则/约定/实体框架,支持延迟加载。这里的答案有详细的解释。它工作得很好,谢谢,但是你能为我解释一下为什么没有虚拟财产它不工作吗?虚拟在这里扮演什么角色?它是一个规则/约定/实体框架,支持延迟加载。这里的答案有详细的解释。