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 似乎存在歧义或冲突。我做错了什么?任何帮助非常感谢。
您似乎正在使用数据库中不存在的值设置SalutationID
。 此外,您确定错误发生在Add
行中吗? 通常实体框架在调用方法时SaveChanges
这些错误。
冲突发生在分配的称呼 ID 和称呼表中的称呼 ID 之间。 您设置了一个约束,指出您不能插入具有称呼表中不存在的称呼 ID 的员工记录。
在失败的行上放置一个断点,并检查 tempSalID 的值,并将其与表中的值进行比较。
需要删除约束,或者需要先向称呼表添加新记录,然后再将记录添加到工作人员表(如果存在此条件(。