Вставка данных в Entity Framework - PullRequest
       1

Вставка данных в Entity Framework

0 голосов
/ 09 октября 2019

Я уже застрял на пол дня, чтобы понять, что я здесь сделал неправильно. Я вставляю новую запись с приложением сотрудника и информацией 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();
        }
    }

Я получаю эту ошибку:

Не удалось закрепить ограничение Не удалось выполнить ограничение UNIQUE: tblCHRISEmployee.CHRISID

Почему я получил эту ошибку?

1 Ответ

0 голосов
/ 09 октября 2019

Думаю - метод FirstOrDefault () возвращает элемент из нулевого индекса в коллекции ... так что вы можете установить id в качестве первичного ключа в таблице списка, что означает, что значение должно быть уникальным для каждой записи,Попытка вставить несколько записей с одним и тем же идентификатором вызывает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...