实体框架ID值分配:

时间:2012-03-26 21:15:17

标签: asp.net-mvc-3 entity-framework

我有一个在db First Model中定义的实体:

public class Merlin_BR_Condiciones_Item
{
 public int IntIdGrupoCondiciones { get; set; }
 public string StrCondicion { get; set; }
 [Key]
 public int IntIdCondicion { get; set; }

 public virtual Merlin_BR_Condiciones_Item_Grupos Merlin_BR_Condiciones_Item_Grupos { get; set; }
}

自动生成具有此创建操作的控制器:

public ActionResult Create(int pIntIdGrupoCondiciones = 0 )
{
   ViewBag.IntIdGrupoCondiciones = new SelectList(db.Merlin_BR_Condiciones_Item_Grupos, "IntIdGrupoCondiciones", "StrDescripcionGrupo");
   return View();
}
[HttpPost]
public ActionResult Create(Merlin_BR_Condiciones_Item merlin_br_condiciones_item)
{
     if (ModelState.IsValid)
     {
         //================================================================================
         // This section add the current key to IntIdCondicion 
         //================================================================================
         var max = from c in db.Merlin_BR_Condiciones_Item
                  select c;
         merlin_br_condiciones_item.IntIdCondicion = max.AsQueryable().Max(x => x.IntIdCondicion) + 1;
         //================================================================================

         db.Merlin_BR_Condiciones_Item.Add(merlin_br_condiciones_item);
         db.SaveChanges();
         return RedirectToAction("Index");  
     }

    ViewBag.IntIdGrupoCondiciones = new SelectList(db.Merlin_BR_Condiciones_Item_Grupos, "IntIdGrupoCondiciones", "StrDescripcionGrupo", merlin_br_condiciones_item.IntIdGrupoCondiciones);
     return View(merlin_br_condiciones_item);
}

此实体在HttPost中手动分配了Id列(创建操作)。 问题是错误导致我无法在 IntIdCondicion 列中插入NULL值。

按照一步一步的代码,值始终返回一个有效的密钥。

请求帮助。

1 个答案:

答案 0 :(得分:1)

默认情况下,EF期望在数据库中生成所有整数主键。因此,修改映射并告诉EF您的主键不是自动生成的:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int IntIdCondicion { get; set; }

如果您使用的是EDMX,则必须在StoreGeneratedPattern属性中将None配置为IntIdCondicion