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; }
感謝這麼多的幫助,可惜的是我得到這個數錯誤。請參閱下面的屏幕截圖: http://gyazo.com/59677cfc429f15f80891fa6b1a008893 不幸的是,我對開發很公平,所以我不是100%在這裏做什麼,但任何幫助將超過讚賞! – 2013-02-11 10:33:22
Ooopps ..對不起我的錯誤隊友..你可以試試更換** userTariff.SubscriptionServices.ToList(** with ** userTariff.SubscriptionServices.ToList()。ForEach(**。我沒有一個代碼編輯器與我,所以請讓我知道如果你遇到任何其他編譯錯誤 – 2013-02-11 12:28:56
並請確保你有System.Linq命名空間包括 – 2013-02-11 12:30:27