MVC VS 2012 - 使用 ViewModel 时插入到单个表

本文关键字:插入 单个表 ViewModel 使用 VS 2012 MVC | 更新日期: 2023-09-27 18:34:44

我从下表开始;一个用于员工姓名,一个用于称呼:

public class PrmTbl_Salutation
{
    public int ID { get; set; }
    public string Desc { get; set; }
    public bool Active { get; set; }
    public PrmTbl_Salutation(int id, string desc, Boolean active)
    {
        ID = id;
        Desc = desc;
        Active = active;
    }
    public PrmTbl_Salutation() { }
}
public class PrmTbl_Staff
{
    public int ID { get; set; }
    public int SalutationID { get; set; }
    public string Name { get; set; }
    public bool Active { get; set; }
    public PrmTbl_Staff(int id, int salID, string name, Boolean active)
    {
        ID = id;
        SalutationID = salID;
        Name = name;
        Active = active;
    }
    public PrmTbl_Staff() { }
    public PrmTbl_Salutation Salutation { get; set; }
}

我为每个表都有单独的视图,但希望将它们合并,以便在员工姓名之前加上他们的相关称呼。该视图将包括一份可编辑的现有工作人员名单作为表格,另一份表格用于插入新的工作人员记录。这是视图模型:

public class StaffSalutation
{
    public int StaffID { get; set; }
    public string Name { get; set; }
    public string Salutation { get; set; }
    public int SalutationID { get; set; }
    public bool Active { get; set; }
    public List<PrmTbl_Salutation> SaltsList { get; set; }
}

更新功能工作正常:

PrmTbl_Staff thisRow = staffDB.PrmTbl_Staffs.Find(id);
string tempName = Convert.ToString(UpdateArray[thisName]);
Boolean tempActive = Boolean.Parse(UpdateArray[thisActive]);
int tempSalID = Convert.ToInt32(UpdateArray[thisSalID]);
thisRow.Name = tempName;
thisRow.Active = tempActive;
thisRow.SalutationID = tempSalID;
staffDB.SaveChanges();

。但插入失败

string tempName = Convert.ToString(staff["name"]);
int tempSalID = Convert.ToInt32(staff["saltID"]);
PrmTbl_Staff thisRecord = new PrmTbl_Staff(0, tempSalID, tempName, true);
staffDB.PrmTbl_Staffs.Add(thisRecord); //FAILS HERE
staffDB.SaveChanges();
return RedirectToAction("Staff");

错误The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.PrmTbl_Staff_dbo.PrmTbl_Salutation_SalutationID". The conflict occurred in database "LibraryBase2.DAL.LibraryContext", table "dbo.PrmTbl_Salutation", column 'ID'. The statement has been terminated.

这是我第一次使用ViewModels。关于称呼 ID 和新员工 ID 似乎存在歧义或冲突。我做错了什么?任何帮助非常感谢。

MVC VS 2012 - 使用 ViewModel 时插入到单个表

您似乎正在使用数据库中不存在的值设置SalutationID。 此外,您确定错误发生在Add行中吗? 通常实体框架在调用方法时SaveChanges这些错误。

冲突发生在分配的称呼 ID 和称呼表中的称呼 ID 之间。 您设置了一个约束,指出您不能插入具有称呼表中不存在的称呼 ID 的员工记录。

在失败的行上放置一个断点,并检查 tempSalID 的值,并将其与表中的值进行比较。

需要

删除约束,或者需要先向称呼表添加新记录,然后再将记录添加到工作人员表(如果存在此条件(。