Обновление дочерних объектов в Entity Framework не работает - PullRequest
0 голосов
/ 17 января 2019

Здравствуйте, у меня есть класс с именем Property:

Имеет следующие дочерние объекты: -

Public class Property
{

  public virtual ICollection<PropertyUrl> Property_URLs { get; set; }
  public virtual ICollection<BrochureData> Property_Brochures { get; set; }
  public virtual ICollection<ImageSortOrder> Property_ImageSortOrders { get; set; }

}

Когда я пытаюсь обновить Property и вместе с ним Child Entities, я вижу новые записи, созданные для Child Entities, вместо обновленных существующих. Например, я отправляю ImageSortOrder в свойстве для обновления: -

           //Property Image
            ImageSortOrder imageSortOrder = new ImageSortOrder();
            imageSortOrder.FileName = "Sai Test Image.jpg";
            imageSortOrder.SortOrder = 2; ;
            imageSortOrder.Image_Cloudinary_PublicId = "Test_1234";
            imageSortOrder.Image_Cloudinary_Url = "www.jll.com";
            imageSortOrder.MimeType = "jpg";
            imageSortOrder.IsActive = true;
            imageSortOrder.ModifiedOn = DateTime.Now;
            imageSortOrder.SortOrder = 1;
            imageSortOrder.ImageSortOrderId = 862;

            p.Property_ImageSortOrders.Add(imageSortOrder);

Как видите, я пытаюсь обновить дочернюю сущность с идентификатором 862. Вместо этого он создает новую запись с идентификатором - 863.

Насколько я понимаю, он должен обновлять дочерние объекты, если они уже присутствуют. Вместо этого, кажется, добавляются новые записи.

Может кто-нибудь сказать мне, что происходит и как мне решить проблему.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Да, и вот почему я ненавижу EF. но ваш код должен быть таким.

Если вам нужна лучшая библиотека, которая делает то, что вы сказали, попробуйте мою библиотеку EntityWorker.Core

// Свойство Image

    ImageSortOrder imageSortOrder = dbcontext.Property_ImageSortOrders.Where(c=> c.ImageSortOrderId == 862).First();
    imageSortOrder.FileName = "Sai Test Image.jpg";
    imageSortOrder.SortOrder = 2; ;
    imageSortOrder.Image_Cloudinary_PublicId = "Test_1234";
    imageSortOrder.Image_Cloudinary_Url = "www.jll.com";
    imageSortOrder.MimeType = "jpg";
    imageSortOrder.IsActive = true;
    imageSortOrder.ModifiedOn = DateTime.Now;
    imageSortOrder.SortOrder = 1;
0 голосов
/ 17 января 2019

Вы создаете новый экземпляр ImageSortOrder, и значение Id назначается автоматически базой данных. Если вы хотите обновить существующий объект, вы должны получить его из DbContext и обновить его свойства.

В качестве альтернативы, вы можете использовать метод Attach в DbSet вместо Add в дочерней коллекции. Это будет работать так, как вы ожидаете.

    var entity = new ImageSortOrder{ ImageSortOrderId = 862};
    db.ImageSortOrders.Attach(entity);

    // Now you can update the properties...

    // ...and save changes
    db.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...