Каков наилучший способ вставить, если не существует, в противном случае обновление в ядре entityframework? - PullRequest
0 голосов
/ 01 февраля 2020

Вот модель:

public class UserModel
{
        public boolean Online{ get; set; }        
        [Key]
        public string id { get; set; }

}

А вот DBContext:

 public class UserDBContext:DbContext
 {
        public virtual DbSet<UserModel> UserStatus { get; set; }
        public UserDBContext(DbContextOptions options) : base(options)
        {

        }

        protected UserDBContext()
        {
        }
}

При наличии онлайн-статуса пользователя необходимо выполнить запись в базу данных.

Если id не существует в базе данных, вставьте его.

Если в базе данных существует id, обновите его.

Теперь я делаю это так:

public async Task SetUserStatus(UserModel UM)
{

    if (UserDBContext.UserStatus.Where(X => X.id == UM.id).Count() != 0)
    {
       UserDBContext.UserStatus.Update(UM);
    }
    else
    {
       UserDBContext.UserStatus.Add(UM);
    }
    UserDBContext.SaveChanges();                      
}

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

Как я могу решить это? Спасибо.

1 Ответ

1 голос
/ 01 февраля 2020

Вы должны использовать Any() вместо

Определяет, существует ли какой-либо элемент последовательности или удовлетворяет условию.

if (UserDBContext.UserStatus.Any(X => X.id == UM.id))
{
   UserDBContext.UserStatus.Update(UM);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...