Обновление строки базы данных с C# - PullRequest
0 голосов
/ 22 января 2020

Мне нужна помощь в обновлении строки в таблице базы данных и застрял в этом. Кто-нибудь, пожалуйста, помогите мне, как добиться этого?

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

Моя модель выглядит следующим образом

namespace MySite.Models
{
    [TableName("Product")]
    [PrimaryKey("ProductId", autoIncrement = false)]
    [ExplicitColumns]
    public class Product
    {
        [Column("ProductId")]
        [PrimaryKeyColumn(AutoIncrement = false)]
        public Guid ProductId{ get; set; }        
        [Column("ProductName")]
        [NullSetting(NullSetting = NullSettings.Null)]
        public string ProductName { get; set; }
        [Column("ProductPrice")]
        [NullSetting(NullSetting = NullSettings.Null)]
        public string ProductPrice { get; set; }
        [Column("Category")]
        public string Category { get; set; }
    }
}

По запросу пользователя на продукт, я проверяю базу данных на предмет наличия продукта существует, если нет выхода, я вставляю строку json, извлеченную из внешнего URL:

var myProduct = this.DatabaseContext.Database.Fetch<Product>("Select * from Product where ProductId = @0", productId);

JSon выглядит так:

{"productId":"4632fdeb-0b8e-471f-a44a-0b07b5444656","ProductName":"MyProduct ABC 01","ProductPrice":"1000","Category":"1"}

Моя вставка выглядит следующим образом:

Product productInfo = null;
productInfo = JsonConvert.DeserializeObject<Product>(jsonResponse);

if (!myProduct.Any())
{
    this.DatabaseContext.Database.Insert(productInfo);
}

Я хочу таким же образом обновить строку продукта из той же строки json, если она найдет запись, как мне это сделать?

if (myProduct.Any())
{
    //I want to update the matching product row on the database, how do I do that?
}

1 Ответ

2 голосов
/ 22 января 2020

Вы должны воспользоваться EF, если вы его используете! Не отправляйте пользовательские запросы, если они могут быть созданы для вас EF. Так что вы должны сделать что-то вроде ниже:

var productInfo = JsonConvert.DeserializeObject<Product>(jsonResponse);
var product = this.DatabaseContext.Products
  .FirstOrDefault(p => p.ProductId == productInfo.ProductId);

if (product == null) {
  // no product, insert
  this.DatabaseContext.Products.Add(productInfo);
}
else {
  // there is product, update, for example
  product.ProductPirce = productInfo.ProductPrice;
}

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