2015-07-20 50 views
2

我已經在我的數據庫,名爲AccountCoupon,這是在DataModel.tt定義爲這樣的AccountCoupon.cs創建一個表:錯誤插入到數據庫 - 值不能爲空

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

我再隨機生成的ID使用可用字符的字符數組,一個for循環,然後將其添加到數據庫:

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'看起來它會超出你的數據庫調用範圍 – Kritner

+0

@greenhorn第二個Random.Next()參數是唯一的上限,所以random不會生成值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