繁体   English   中英

如何从 API 获取数据并将其插入数据库而不在 ASP.NET MVC 中重复?

[英]How to get data from API and insert it into database without repeating in ASP.NET MVC?

所以,我有一个简单的 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() 方法分开?

感谢帮助!

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

UPD: myItem 的字段“名称”必须是唯一的,但如果具有此名称的项目已存在,我需要更新其他字段中的数据,所以我这样做了:

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

假设您想为每个唯一用户插入数据库,您可以使用 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM