2015-07-20 2 views
2

Я создал таблицу в моей базе данных, которая называется AccountCoupon, которая определяется как это в AccountCoupon.cs в DataModel.tt:Ошибка вставки в базу данных - значение не может быть пустым

public partial class AccountCoupon 
{ 
    public string CouponID { get; set; } 
    public int Days { get; set; } 
} 

Я затем создает идентификатор случайным образом с помощью голец массив доступных символов и для цикла, а затем добавить его в базу данных:

public ActionResult Create() 
{ 
    if (!string.IsNullOrWhiteSpace(Request["CouponDays"])) 
    { 
     int days = 0; 
     int.TryParse(Request["CouponDays"], out days); 
     if (days > 0) 
     { 
      string cID = ""; 
      for (int i = 0; i < 10; i++) 
      { 
       cID += couponCharacters[rand.Next(couponCharacters.Count())]; 
      } 

      db.AccountCoupons.Add(new AccountCoupon { CouponID = cID, Days = days }); 
      db.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 
     return RedirectToAction("Index"); 
    } 
    return View(); 
} 

Однако, когда я пытаюсь добавить его в базу данных, он бросает ошибку о том, что CouponID является NULL, и что вставка не смогли. Который мне невозможен, потому что я просто присвоил ему значение.

+0

элемент по индексу «couponCharacters.Count()» не существует, и для этого равна нулю. – greenhoorn

+1

У вас нет ошибки в компиляции? Из того, что вы разместили «ID», похоже, что это выходит за рамки вашего вызова db. – Kritner

+0

@greenhorn второй аргумент Random.Next() является эксклюзивным верхним пределом, поэтому случайный никогда не будет генерировать значение coupnCharacters.Count() , поэтому он действителен, как и был опубликован. – LInsoDeTeh

ответ

0

Проблема была в собственности StoreGeneratedPattern для CouponID имущества таблицы. По умолчанию установлено значение Identity, что вызывает ошибки, потому что строка не может быть сгенерирована автоматически. Установка значения в None решить вопрос:

enter image description here

0

Вы создаете экземпляр строки с именем ID каждый раз внутри цикла. Таким образом, он существует только внутри цикла. Попробуйте

string ID = string.Empty 
for (int i = 0; i < 10; i++) 
    ID += couponCharacters[random.Next(couponCharacters.Count())]; 

db.AccountCoupons.Add(new AccountCoupon { CouponID = ID, Days = iDays }); 
+0

Мой плохой, у меня на самом деле есть объявление строки за пределами цикла, я обновлю свой вопрос – Shadow

Смежные вопросы