2015-07-20 24 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