Entity Framework edit and add error



  • Using UnitOfWork Repositories

    Models

    public class UTaskModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime DateCrt  { get; set; }
        public DateTime DateFinish { get; set; }
        public DateTime DateCncl { get; set; }
        public string UserCncl { get; set;
        public string UserCtrl { get; set; }
    
    public virtual ICollection<UTaskTargetModel> UTaskTargets { get; set; }
    

    }
    public class UTaskTargetModel
    {
    public int Id { get; set; }
    public int UTaskId { get; set; }
    public string Text { get; set; }
    public DateTime DateCmpl { get; set; }
    }

    The target is UTask

    Setting up a record in the bud.

    public void Create(UTask utask)
    {
    db.UTasks.add(utask)
    }

    After a period, tomorrow, after tomorrow, UTask adds objectives

    Choose ID UTask and add UTaskTargets

    adding and updating

        public void UpdateUTask(UTaskDTO data)
    {
    var item = Database.UTasks.Find(f => f.Id == data.Id).SingleOrDefault();
    if (item != null)
    {
    AddTargets(data.UTaskTargets);

            Database.UTasks.Update(Mapper.Map<UTaskDTO, UTaskModel>(data));
            Database.Save();
        }
        else
        {
            throw new ValidationException("UTask not exist", "");
        }
    }
    

    UTaskTargets added,
    I want to update UTask DateFinish = DateTime.Now

        public void Update(UTaskModel item)
    {
    db.Entry(item).State = System.Data.Entity.EntityState.Modified;
    }

    Makes a mistake.

            Не удалось присоединить сущность типа "NDashApp.DAL.Entities.Feedback.FeedbackModel",
    поскольку другая сущность этого же типа уже имеет такое же значение первичного ключа.
    Такое возможно при использовании метода "Attach"
    или задании сущности состояния "Unchanged" или "Modified",
    если какие-либо сущности в графе имеют конфликтующие значения ключей.
    Такое возможно из-за того, что некоторые сущности являются новыми и
    пока еще не получили значения ключей, сформированные базой данных.
    В этом случае используйте метод "Add" или состояние сущности
    "Added" для отслеживания графа, а затем задайте сущностям,
    которые не являются новыми, состояние "Unchanged" или "Modified".

    I've tried a lot, I can't update the DateFinish.

    How to update the DateFinish in UTask?



  • It's because DbContext is tracking the changes of all materialized in this session and if you have not specifically disconnected the essence from the context, then you don't have to join it. Just change the field and call SaveChanges.

    And you better make every change in all the things you need, and then you do SaveChanges. It's the concept of Entity Framework, it runs a pathetic unit of work, changes everything you need and ends with a single transaction.

    I didn't see the correct use of DdContext. For example:

    using(var db = new DbContext())
    {
        // здесь все манипуляции
        db.SaveChanges();
    }
    

    The essence is simple, doing as short a DbContext as possible.

    p.s. Instead of DbContext, your class is the heir.




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2