当前位置:  开发笔记 > 编程语言 > 正文

Nopcommerce更新实体问题

如何解决《Nopcommerce更新实体问题》经验,为你挑选了0个好方法。

使用NopCommerce 3.8,Visual Studio 2015 proff.

我创建了一个插件,负责对我的Web API进行静态调用,将不同的数据库暴露给Nop.

这个过程是通过一个nop Task运行的,它成功地将数据拉回来,我可以按照我的意愿逐步操作和操作,到目前为止没有任何问题.

当我尝试更新产品表上的记录时出现问题,我执行更新...但没有任何变化,没有变化,没有错误.

我相信这是由于Context不知道我新实例化的产品对象,但是我在我需要做的与我的特定例子相关的事情上画了一个空白.

类似的问题通常引用作为方法调用参数一部分的"模型"对象,"模型"具有ToEntity似乎是堆栈中类似问题的答案的方法.

但是我的示例ToEntity可能没有类/方法,因为我的参数实际上是产品列表.在这里澄清我的代码.

RestClient.cs中的方法

public async Task> GetAsync()
    {
        try
        {
            var httpClient = new HttpClient();

            var json = await httpClient.GetStringAsync(ApiControllerURL);

            var taskModels = JsonConvert.DeserializeObject>(json);

            return taskModels;
        }
        catch (Exception e)
        {
            return null;
        }
    }

我的服务类中的方法

public async Task> GetProductsAsync()
    {
        RestClient restClient = new RestClient(ApiConst.Products);
        var productsList = await restClient.GetAsync();

        InsertSyncProd(productsList.Select(x => x).ToList());
        return productsList;
    }
 private void InsertSyncProd(List inserted)
    {
        var model = inserted.Select(x =>
        {
            switch (x.AD_Action)
            {
                case "I":
                    //_productService.InsertProduct(row);
                    break;
                case "U":
                    UpdateSyncProd(inserted);
                  .....

然后是绑定和更新的方法

private void UpdateSyncProd(List inserted)
    {
        var me = inserted.Select(x =>
        {
            var productEnt = _productRepos.Table.FirstOrDefault(ent => ent.Sku == x.Sku.ToString());
            if(productEnt != null)
            {
                productEnt.Sku = x.Sku.ToString();
                productEnt.ShortDescription = x.ShortDescription;
                productEnt.FullDescription = x.FullDescription;
                productEnt.Name = x.Name;
                productEnt.Height = x.Pd_height != null ? Convert.ToDecimal(x.Pd_height) : 0;
                productEnt.Width = x.Pd_width != null ? Convert.ToDecimal(x.Pd_width) : 0;
                productEnt.Length = x.Pd_depth != null ? Convert.ToDecimal(x.Pd_depth) : 0;
                productEnt.UpdatedOnUtc = DateTime.UtcNow;
            }
            //TODO: set to entity so context nows and can update
            _productService.UpdateProduct(productEnt);

            return productEnt;
        });

    }

如您所见,我获取数据并根据结果将数据传递给某些方法.从迭代的方法列表中,从表中提取实体,然后使用该操作实体通过产品服务进行更新.

所以我在这里错过了什么,我确定它的第1步,我认为它可能是因为1)上下文仍然不知道有问题的实体,或2)其不正确的调用.

摘要 更新未更新,可能是由于上下文不知道或我的方法错误.(可能两者).

更新:

我添加了一些logger.inertlog我的服务,它运行良好,所有到更新的调用点.但我再次检查产品,管理部分没有任何变化.

插入

我提供了完整的源代码,因为我认为这可能与其余的代码设置有关吗?

更新:

在我的execute方法中为testin添加了以下内容.

var myprod = _productRepos.GetById(4852);
myprod.ShortDescription = "db test";
productRepos.Update(myprod);

这成功更新了产品说明.我将我的方法从我的服务转移到任务类但仍然没有运气.我越是看它越认为我的异步是以某种方式杀死数据库上下文.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有