У меня в основном проблемы со следующими классами: ShoppingBasket и Coupon.Моя модель ShoppingBasket имеет атрибуты:
public Coupon[] theCoupons = new Coupon[20];
public string userForeignKey {get;set;} //To identify which user the basket belongs to
public int iCurrentCoupon {get;set;} //Where I am in the coupon-array
Метод-купон addDoShoppingBasket-Method выглядит следующим образом:
public ActionResult addToShoppingBasket(int id) //Coupon id
{
// Get current user
var store = new UserStore<ApplicationUser>(db);
var manager = new UserManager<ApplicationUser>(store);
var currentUser = manager.FindById(User.Identity.GetUserId());
// Get coupon with selected id
Coupon tmpCoupon = db.Coupons.SingleOrDefault(x => x.id == id);
// Get ShoppingBasket of current user
var tmpBasket = db.ShoppingBaskets.SingleOrDefault(x => x.userForeignKey == currentUser.Id);
// add the coupon into basket; here's the problem I think
tmpBasket.theCoupons[tmpBasket.iCurrentCoupon] = tmpCoupon;
//there's an if-clause and some other stuff around this, basically not to overwrite already added coupons
tmpBasket.iCurrentCoupon++;
db.SaveChanges();
return RedirectToAction("Index", "ShoppingBasket");
}
Индекс-метод ShoppingBasket-Controller:
public ActionResult Index()
{
//Get current user
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyContext()));
var currentUser = manager.FindById(User.Identity.GetUserId());
//Get shopping basket from selected user
var basketConsumer = db.ShoppingBaskets.Where(i => i.userForeignKey == currentUser.Id).SingleOrDefault();
return View(basketConsumer);
}
При проверке basketConsumer во время запуска программы я вижу, что iCurrentCoupon
обновлен правильно, но basketConsumer.theCoupons[basketConsumer.iCurrentCoupon]
по-прежнему (/ или снова?) Равен нулю, а сделанные изменения не сохранены.
Я пробовал разные вещи, такие как:
db.ShoppingBaskets.Attach(tmpBasket);
db.Entry(tmpBasket).State = EntityState.Modified;
db.Coupons.Attach(tmpBasket.theCoupons[tmpBasket.iCurrentCoupon];
Мне пришлось перевести большую часть материала, чтобы в коде могли быть небольшие несоответствия.Я давно не работал с asp.net или C # в целом, но это кажется довольно тривиальной вещью, которую я на всю жизнь не могу понять, как решить.Почему iCurrentCoupon
сохраняется, а массив - нет (и как я могу это изменить)?Любая помощь очень ценится!
РЕДАКТИРОВАТЬ: Не совсем уверен, в чем проблема, но я исправил ее, сделав theCoupons[]
ICollection вместо массива.После этого я обновил оба моих класса так, чтобы они имели отношение «многие ко многим», как показано здесь .Удалил ненужный материал, добавил миграцию, обновил базу данных и все заработало.Я буду держать вопрос открытым, возможно, кто-то может объяснить мне, почему моя первая попытка не сработала.