2013-02-08 48 views
0

在我的MVC3應用程序中,我有一堆「SubscriptionTariffs」,每個都與一些「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"); 
    } 

,哪些應該在數據庫上運行的查詢管理器的部分:

var userTariff = (from s in this.Database.SubscriptionTariffs 
            where s.SubscriptionTariffId.Equals(subscriptionTariff.SubscriptionTariffId) 
            select s).FirstOrDefault(); 

    userTariff.SubscriptionTariffId = subscriptionTariff.SubscriptionTariffId; 
    userTariff.Name = subscriptionTariff.Name; 
    userTariff.Description = subscriptionTariff.Description; 
    userTariff.IsActive = subscriptionTariff.IsActive; 
    userTariff.PricePerMonth = subscriptionTariff.PricePerMonth; 
    userTariff.CurrencyCode = subscriptionTariff.CurrencyCode; 
    userTariff.PaymentServiceProvider = subscriptionTariff.PaymentServiceProvider; 
    userTariff.IncomingMaxTransactionPerMonth = subscriptionTariff.IncomingMaxTransactionPerMonth; 
    userTariff.OutgoingMaxTransactionPerMonth = subscriptionTariff.OutgoingMaxTransactionPerMonth; 

    userTariff.SubscriptionServices = subscriptionTariff.SubscriptionServices; 

    this.Database.SaveChanges(); 
    Gateway.Instance.Logger.LogDebug("SaveSubscription method exited"); 
    return subscriptionTariff.SubscriptionTariffId; 

關稅是更新很好,但我可以」讓服務得到更新。如果有人能給我一隻手,將不勝感激!

編輯:

也可能有用,包括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; } 

回答

0

userTariff.SubscriptionServices = subscriptionTariff.SubscriptionServices; 

insted的請嘗試

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; 
     } 
    }); 
+0

感謝這麼多的幫助,可惜的是我得到這個數錯誤。請參閱下面的屏幕截圖: http://gyazo.com/59677cfc429f15f80891fa6b1a008893 不幸的是,我對開發很公平,所以我不是100%在這裏做什麼,但任何幫助將超過讚賞! – 2013-02-11 10:33:22

+0

Ooopps ..對不起我的錯誤隊友..你可以試試更換** userTariff.SubscriptionServices.ToList(** with ** userTariff.SubscriptionServices.ToList()。ForEach(**。我沒有一個代碼編輯器與我,所以請讓我知道如果你遇到任何其他編譯錯誤 – 2013-02-11 12:28:56

+0

並請確保你有System.Linq命名空間包括 – 2013-02-11 12:30:27

相關問題