Как получить данные из API и вставить их в базу данных, не повторяя в ASP.NET MVC? - PullRequest
1 голос
/ 19 марта 2019

Итак, у меня есть простое веб-приложение, которое берет данные из API, десериализует их, вставляет в базу данных и затем отображает в виде таблицы. Я не знаю, как отделить десериализацию и вставку от моего метода Index (), поэтому каждый раз, когда я обновляю страницу, она десериализуется и снова вставляет данные.

Контроллер:

public class HomeController : Controller
{
    private DBContext db = new DBContext();
    public string data = "...."; //here is the json data that i get from API

    public ActionResult Index()
    {
        RootObj myData = JsonConvert.DeserializeObject<RootObj>(data);
        foreach (var item in myData)
        {
            MyModel myItem = new MyModel
            {
                name = item.name,
                symbol = item.symbol,
                price = item.price,
            };
            db.MyItemsDB.Add(myItem);
            db.SaveChanges();
        }
        return View(db.MyItemDB.ToList());
    }
    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
}

Как я могу отделить десериализацию и вставку от метода Index ()?

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Я не думал о том, что мой json меняется, но он меняется, и поэтому мне нужно делать вставку в базу данных при каждом обновлении страницы.Решение заключается в создании уникального поля в базе данных, поэтому повторных данных не будет.

UPD: Поле «имя» myItem должно быть уникальным, но мне нужно обновить данные в других полях, если элемент с таким именем уже существует, поэтому я сделал это:

db.MyItemsDB.AddOrUpdate(m => m.name, myItem);
db.SaveChanges();
0 голосов
/ 19 марта 2019

Если вы хотите выполнить вставку базы данных для каждого уникального пользователя, вы можете использовать cookie.

Если куки не существует, пользователь еще не посещал сайт (или удалил свои куки) Если файл cookie существует, пользователь уже посетил и вы не выполняете вставку базы данных.

Не удаляет все вставки, но уменьшает их.

If(HttpContext.Current.Response.Cookies.AllKeys.Contains("myCookie") == false)
    db.SaveChanges();
else 
{
    HttpCookie myCookie = new HttpCookie("myCookie");
    myCookie.Value = "SomeInfo";
    myCookie.Expires = DateTime.Now.AddDays(1d);
    Response.Cookies.Add(myCookie);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...