Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过模型更新集合而不创建新行_C#_Asp.net_Sql_Asp.net Mvc 3_Linq To Sql - Fatal编程技术网

C# 通过模型更新集合而不创建新行

C# 通过模型更新集合而不创建新行,c#,asp.net,sql,asp.net-mvc-3,linq-to-sql,C#,Asp.net,Sql,Asp.net Mvc 3,Linq To Sql,在我的MVC3应用程序中,我有一堆“subscriptiontariff”,每一个都与许多“SubscriptionServices”相关。我创建了一个视图,可以编辑这些费率,还可以编辑通过服务模型传递的集合 问题是,每当我提交表单时,它都会为每个附加的服务创建一个新行,而不是编辑数据库中的现有服务 以下是我的控制器的方法: /// <summary> /// Function Edit /// </summary> /// <par

在我的MVC3应用程序中,我有一堆“subscriptiontariff”,每一个都与许多“SubscriptionServices”相关。我创建了一个视图,可以编辑这些费率,还可以编辑通过服务模型传递的集合

问题是,每当我提交表单时,它都会为每个附加的服务创建一个新行,而不是编辑数据库中的现有服务

以下是我的控制器的方法:

    /// <summary>
    /// Function Edit
    /// </summary>
    /// <param name="subscriptionViewModel"></param>
    /// <returns></returns>
    [HttpPost]
    public ActionResult Edit(SubscriptionViewModel subscriptionViewModel)
    {
        if (subscriptionViewModel == null) throw new ArgumentException("The value of subscriptionViewModel cannot be null.", "subscriptionViewModel");

        Gateway.Instance.Logger.LogDebug("SubscriptionController Edit: Method entered.");

        using (_ownerManager)
        {
            var mappedSubscription = Mapper.Map<SubscriptionTariff>(subscriptionViewModel);
            _ownerManager.SaveSubscription(mappedSubscription);
        }

        Gateway.Instance.Logger.LogDebug("SubscriptionController Edit: Method exited.");

        return RedirectToAction("Index");
    }
费率正在更新,但我无法更新服务。如果有人能帮我一把,我将不胜感激

编辑:

包括ViewModel可能也很有帮助

    /// <summary>
    /// 
    /// </summary>
    public int SubscriptionTariffId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string Description { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public bool IsActive { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public decimal PricePerMonth { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string CurrencyCode { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string PaymentServiceProvider { get; set; }

    /// <summary>
    /// Gets or sets the outgoing max transaction per month.
    /// </summary>
    /// <value>The outgoing max transaction per month.</value>
    public int OutgoingMaxTransactionPerMonth { get; set; }

    /// <summary>
    /// Gets or sets the incoming max transaction per month.
    /// </summary>
    /// <value>The incoming max transaction per month.</value>
    public int IncomingMaxTransactionPerMonth { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public virtual ICollection<SubscriptionService> SubscriptionServices { get; set; }
//
/// 
/// 
public int SubscriptionTariffId{get;set;}
/// 
/// 
/// 
公共字符串名称{get;set;}
/// 
/// 
/// 
公共字符串说明{get;set;}
/// 
/// 
/// 
公共bool IsActive{get;set;}
/// 
/// 
/// 
公共十进制价格月{get;set;}
/// 
/// 
/// 
公共字符串CurrencyCode{get;set;}
/// 
/// 
/// 
公共字符串PaymentServiceProvider{get;set;}
/// 
///获取或设置每月传出的最大事务数。
/// 
///每月传出的最大事务数。
public int OutgoingMaxTransactionPerMonth{get;set;}
/// 
///获取或设置每月传入的最大事务数。
/// 
///每月传入的最大事务数。
public int IncomingMaxTransactionPerMonth{get;set;}
/// 
/// 
/// 
公共虚拟ICollection订阅服务{get;set;}
代替

userTariff.SubscriptionServices = subscriptionTariff.SubscriptionServices;
请试一试

subscriptionTariff.SubscriptionServices.ToList().ForEach(ss =>
    {
        // get the instance of the correct subscriptionTariff using the
        // id (IdOfSubscriptionServices)
        var u = userTariff.SubscriptionServices.FirstOrDefault(e => e.IdOfSubscriptionServices == ss.IdOfSubscriptionServices);

        if (u != null)
        {
            // update each property
            u.Prop1 = ss.Prop1;
            u.Prop2 = ss.Prop2;
        }
    });

非常感谢您的帮助,不幸的是,我在这方面遇到了一些错误。请看下面的屏幕截图:不幸的是,我是一个刚刚开始开发的人,所以我不是100%知道该怎么做,但任何帮助都将不胜感激!哎呀。。对不起,我弄错了,朋友。。你能试着用userTariff.SubscriptionServices.ToList()替换userTariff.SubscriptionServices.ToList()吗(.我身边没有代码编辑器,因此如果遇到任何其他编译错误,请告诉我,并确保您有系统。Linq命名空间包含无需道歉,我只是感谢您的帮助伙伴!这越来越近了,没有生成错误,循环正在工作,我可以在管理器中看到映射的属性。但是我的数据库中没有复制NGE。你知道为什么会出现这种情况吗?没有抛出错误,只是没有更新。再次感谢你的持续帮助!请查看我的代码的屏幕截图。我做了你建议的更改,但我的数据库仍然没有更新,你能看到我更改中的任何明显错误吗?gyazo.com/939f983e40037a8bec735ee2cfab5309再次感谢!
subscriptionTariff.SubscriptionServices.ToList().ForEach(ss =>
    {
        // get the instance of the correct subscriptionTariff using the
        // id (IdOfSubscriptionServices)
        var u = userTariff.SubscriptionServices.FirstOrDefault(e => e.IdOfSubscriptionServices == ss.IdOfSubscriptionServices);

        if (u != null)
        {
            // update each property
            u.Prop1 = ss.Prop1;
            u.Prop2 = ss.Prop2;
        }
    });