Как обновить одно свойство в Entity Framework Core - PullRequest
0 голосов
/ 10 июня 2018

Мне нужно обновить только одно или два свойства сущности.Другими словами, у меня есть сущность с Id, ParentId, Name и Description.

Проблема заключается в том, что при обновлении имени описание стирается, если оно уже существует в базе данных.

Это код:

internal void Update(ItemInfo itemInfo)
    {
        var item = new Item { Id = itemInfo.Id, ParentId = itemInfo.ParentId, Name = itemInfo.Name };
        var entry = this.DbContext.Items.Attach(item);
        if(item.ParentId!=null) entry.Property(x => x.ParentId).IsModified = true;
        if(!(String.IsNullOrWhiteSpace(item.Name))) entry.Property(x => x.Name).IsModified = true;
        this.SaveChanges();;
    }

Я думал, что, поскольку я устанавливаю определенное свойство как измененное, будет обновляться только это свойство.

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

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете сделать следующее для обновления одного свойства:

internal void Update(ItemInfo itemInfo)
{
    if (itemInfo == null) { throw new Exception($"item info was not supplied"); }

    var itemInfoEntity = new ItemInfo()
    {
        Id          = itemInfo.Id,
        ParentId    = itemInfo.ParentId,
        Name        = itemInfo.Name 
    };

    dbContext.ItemInfo.Attach(itemInfoEntity);
    dbContext.Entry(itemInfoEntity).Property(x => x.Id).IsModified = true;
    dbContext.Entry(itemInfoEntity).Property(x => x.Id).IsModified = true;
    dbContext.Entry(itemInfoEntity).Property(x => x.Id).IsModified = true;
    dbContext.SaveChanges();
}

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

internal void Update(id, parentId, name)
{
 ...
}
0 голосов
/ 10 июня 2018

Сначала вы должны получить сущность из базы данных, а затем обновить сущность.

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