首页 > 解决方案 > 在实体框架中插入数据

问题描述

我已经被困了半天,想知道我在这里做错了什么。我在此处插入带有员工和 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; }
}

my 是我在数据库中插入新记录的功能。

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();
        }
    }

我收到此错误:

约束失败 UNIQUE 约束失败:tblCHRISEmployee.CHRISID

为什么我收到此错误?

标签: c#entity-frameworksqlite

解决方案


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


推荐阅读