我已经呆了半天,弄清楚自己在这里做错了什么。我要在员工和CHRIS信息附上插入新记录。
我的模特:
public class tblEmployeeDetail
{
[Key]
public string EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
private string _Bank;
public string Bank
{
get
{
return _Bank;
}
set
{
_Bank = value.ToString().Replace("-", "");
}
}
}
public class tblCHRISEmployee
{
[Key]
public string CHRISID { get; set; }
public string EmployeeID { get; set; }
public string Fullname { get; set; }
private string _Bank;
public string Bank
{
get
{
return _Bank;
}
set
{
_Bank = value.ToString().Replace("-", "");
}
}
}
public class tblWeeklyCredit
{
[Key]
public string WeeklyCreditID { get; set; }
public tblEmployeeDetail Employee { get; set; }
public string Fullname { get; set; }
public string ReportID { get; set; }
public float Amount { get; set; }
public string Description { get; set; }
public DateTime UploadDate { get; set; }
}
我的功能是在数据库中插入新记录。
public void AddWeeklyCredit(List<tblWeeklyCredit> WeeklyCreditData)
{
using (DatabaseContext db = new DatabaseContext())
{
foreach (tblWeeklyCredit RawData in WeeklyCreditData)
{
if(RawData==null)
throw new Exception(string.Format("{0} null", RawData.ReportID));
//attach the data
db.Entry(db.tblCHRISEmployee.Where(x=>x.CHRISID==RawData.CHRIS.CHRISID).FirstOrDefault()).State = EntityState.Unchanged;
db.Entry(db.tblEmployeeDetail.Where(x => x.EmployeeID == RawData.Employee.EmployeeID).FirstOrDefault()).State = EntityState.Unchanged;
//validate if the report ID is already Claimed
if (db.tblWeeklyCredit.Where(x => x.ReportID == RawData.ReportID).FirstOrDefault() != null)
throw new Exception(string.Format("{0} is already Claimed", RawData.ReportID));
db.tblWeeklyCredit.Add
(
RawData
);
}
db.SaveChanges();
}
}
我收到此错误:
约束失败,唯一约束失败:tblCHRISEmployee.CHRISID
为什么会出现此错误?
我认为-FirstOrDefault()方法从集合中的第零个索引返回一个元素...因此,您可以将id设置为列表表上的主键,这意味着该值对于每个记录都必须是唯一的。尝试插入具有相同ID的多个记录会导致错误。