【问题标题】:How to get data from API and insert it into database without repeating in ASP.NET MVC?如何从 API 获取数据并将其插入数据库而不在 ASP.NET MVC 中重复?
【发布时间】:2019-08-10 02:32:41
【问题描述】:

所以,我有一个简单的 Web 应用程序,它从 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() 方法分开?

感谢您的帮助!

【问题讨论】:

    标签: c# asp.net asp.net-mvc database


    【解决方案1】:

    我没想到我的 json 会发生变化,但它确实发生了变化,因此我需要在每次页面刷新时插入数据库。解决方案是在数据库中做唯一字段,这样就不会有重复的数据。

    UPD: myItem的“name”字段必须是唯一的,但是如果同名的item已经存在,我需要更新其他字段的数据,所以我这样做了:

    db.MyItemsDB.AddOrUpdate(m => m.name, myItem);
    db.SaveChanges();
    

    【讨论】:

    • 嘿 Quid,我不确定这是否被认为是一个答案,前提是您知道如何使用数据库中的唯一字段。如果您需要帮助了解如何在数据库中设置唯一字段,您可以编辑您的原始答案。
    • @JorenVandamme 嘿,我更新了我的答案,你现在可以检查它是否正确。
    • 太棒了!如果您认为这解决了您的问题,您可以将您的答案标记为解决方案。
    【解决方案2】:

    假设您想为每个唯一用户插入数据库,您可以使用 cookie。

    如果 cookie 不存在,则用户尚未访问该网站(或已删除他的 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);
    }
    

    【讨论】:

    • 我假设 db.SaveChanges() 是您正在谈论的数据库插入。
    • db.SaveChanges() 是我说的数据库插入,是的。但这不是针对每个用户的,它只是获取 json 文件,对其进行反序列化,然后将该数据插入数据库。 Web 应用程序应该在表格中显示该数据。问题是我只需要反序列化和插入一次。
    • json 中是否有任何独特之处,以便您检查它是否已存在于数据库中?
    • 是的。我想你说的是在数据库中做独特的字段,我实际上考虑过这样做,但我得出的结论是这不是解决这个问题的好方法。是这样吗?还是没有别的办法?
    • JSON 总是一样的吗?我有点困惑为什么你会得到它,然后只保存一次。
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2019-03-05
    • 2016-04-10
    • 2021-04-10
    • 2021-07-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多