C# 在实体框架中添加新记录时未自动设置外键

C# 在实体框架中添加新记录时未自动设置外键,c#,.net,asp.net-mvc,entity-framework-6,C#,.net,Asp.net Mvc,Entity Framework 6,我是实体框架中的新手,我正在尝试使用外键约束在表中添加记录。我有两个类,一个是用户,另一个是文件移动。Filemovement将userId作为外键。已成功添加新记录,但外键值仍为空。谁能告诉我我做错了什么吗这里是我的代码 我的用户类代码 [Key] public int User_ID { get; set; } [Display(Name = " User Nmae: ")] [Required(ErrorMessage = "User Name is re

我是实体框架中的新手,我正在尝试使用外键约束在表中添加记录。我有两个类,一个是用户,另一个是文件移动。Filemovement将userId作为外键。已成功添加新记录,但外键值仍为空。谁能告诉我我做错了什么吗这里是我的代码

我的用户类代码

    [Key]
    public int User_ID { get; set; }

    [Display(Name = " User Nmae: ")]
    [Required(ErrorMessage = "User Name is required")]
    public string User_Name { get; set; }

    [Display(Name = " Password: ")]
    [DataType(DataType.Password)]
    [Required(ErrorMessage = "Password is required")]
    public string Password { get; set; }
    [Key]
    public int file_Id { get; set; }

    [ForeignKey("User")]
    public int User_Id_fk { get; set; }

    [Display(Name = " Diary No: ")]
    [Required(ErrorMessage = "Diary No is required")]
    public string Diary_No { get; set; }

    [Display(Name = " Receive Date: ")]
    [Required(ErrorMessage = "Please enter receive date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Receive_Date { get; set; }

    [Display(Name = " Issued Diary No: ")]
    public string Issued_Diary_No { get; set; }

    [Display(Name = " Issue Date: ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Issue_Date { get; set; }

    [Display(Name = " Office Name: ")]
    public string Issued_Office { get; set; }

    [Display(Name = " Subject: ")]
    [Required(ErrorMessage = "Please enter subject")]
    [DataType(DataType.MultilineText)]
    public string Subject { get; set; }

    [Display(Name = " DG(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> DG_Rectt { get; set; }

    [Display(Name = " ADG(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> ADG_Rectt { get; set; }

    [Display(Name = " DD(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> DD_Rectt { get; set; }

    [Display(Name = " AD(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> AD_Rectt { get; set; }

    [Display(Name = " Assistant: ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Assistant_Rectt { get; set; }

    [Display(Name = " GM(HRD): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> GM_HRD { get; set; }

    [Display(Name = " Send To: ")]
    public string Send_To { get; set; }

    [Display(Name = " Date: ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Date { get; set; }

    [Display(Name = " Action: ")]
    public string Action { get; set; }

    [Display(Name = " Status: ")]
    public string Status { get; set; }
这是我的fileMovement类代码

    [Key]
    public int User_ID { get; set; }

    [Display(Name = " User Nmae: ")]
    [Required(ErrorMessage = "User Name is required")]
    public string User_Name { get; set; }

    [Display(Name = " Password: ")]
    [DataType(DataType.Password)]
    [Required(ErrorMessage = "Password is required")]
    public string Password { get; set; }
    [Key]
    public int file_Id { get; set; }

    [ForeignKey("User")]
    public int User_Id_fk { get; set; }

    [Display(Name = " Diary No: ")]
    [Required(ErrorMessage = "Diary No is required")]
    public string Diary_No { get; set; }

    [Display(Name = " Receive Date: ")]
    [Required(ErrorMessage = "Please enter receive date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Receive_Date { get; set; }

    [Display(Name = " Issued Diary No: ")]
    public string Issued_Diary_No { get; set; }

    [Display(Name = " Issue Date: ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Issue_Date { get; set; }

    [Display(Name = " Office Name: ")]
    public string Issued_Office { get; set; }

    [Display(Name = " Subject: ")]
    [Required(ErrorMessage = "Please enter subject")]
    [DataType(DataType.MultilineText)]
    public string Subject { get; set; }

    [Display(Name = " DG(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> DG_Rectt { get; set; }

    [Display(Name = " ADG(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> ADG_Rectt { get; set; }

    [Display(Name = " DD(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> DD_Rectt { get; set; }

    [Display(Name = " AD(Rectt): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> AD_Rectt { get; set; }

    [Display(Name = " Assistant: ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Assistant_Rectt { get; set; }

    [Display(Name = " GM(HRD): ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> GM_HRD { get; set; }

    [Display(Name = " Send To: ")]
    public string Send_To { get; set; }

    [Display(Name = " Date: ")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Date { get; set; }

    [Display(Name = " Action: ")]
    public string Action { get; set; }

    [Display(Name = " Status: ")]
    public string Status { get; set; }
下面是SaveNewFileMOvement方法

    public void SaveNewFileMovement(File_Movement fm)
    {
        using (DiaryManagementSystemEntities db = new DiaryManagementSystemEntities())
        {

            db.File_Movement.Add(fm);
            db.SaveChanges();
        }
    }

我在文件移动类中看不到任何用户选择。您只保存文件移动对象。尝试在控制器代码中显式设置用户Id以查看所需结果。

文件移动类是否具有
User
导航属性?您的
fm
类是否填充了该导航属性(对于新用户)或是否设置了
User\u Id\u fk
(对于现有用户)?@arunPratap是的,它发布了[MetadataType(typeof(File\u MovementMetaData))]类的代码,但在模型类中,它具有导航属性为什么我必须显式添加User\u fk\u Id?实体框架不是自动添加的吗?实际上,您正在尝试单独保存对象。EF如何知道它的主人,即用户。这就是为什么我要求您显式地使用try设置。我显式地将filemovement类中的用户id保存为外键,但在更新记录时仍会出现相同的异常