在实体框架中插入数据

问题描述 投票:0回答:1

我已经呆了半天,弄清楚自己在这里做错了什么。我要在员工和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

为什么会出现此错误?

c# entity-framework sqlite
1个回答
0
投票

我认为-FirstOrDefault()方法从集合中的第零个索引返回一个元素...因此,您可以将id设置为列表表上的主键,这意味着该值对于每个记录都必须是唯一的。尝试插入具有相同ID的多个记录会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.