首先使用MVC 5,EF 6,Oracle和数据库。我正在尝试自动生成名为Mission的对象的ID。目前在数据库中有一个存储过程,它通过在insert命令上使用序列MISSION_SEQ来完成此操作。我无法让这个存储过程工作,所以我想我可以尝试自己处理它:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "<a bunch of fields, but I removed the MISSION_ID field")] MISSION mission)
{
if (ModelState.IsValid)
{
string query = "select MISSION_SEQ.NEXTVAL from MISSION_SEQ";
var query_result = db.Database.SqlQuery<decimal>(query); //throws error "sequence not allowed here"
decimal mission_id = query_result.First();
mission.MISSION_ID = (decimal)mission_id;
db.MISSION.Add(mission);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(mission);
}
这会抛出一个错误“Sequence not allowed here”我想因为你只能在insert语句中使用NEXTVAL。我想我可以查询当前的MISSION_ID并通过向其添加1来生成下一个MISSION_ID,但是如何确保如果多个用户正在进行创建,他们每个都会得到一个唯一的数字?此外,如果创建失败,那么MISSION_ID会丢失吗?我正在寻找任何帮助,指出我在这里正确的方向。感谢。
答案 0 :(得分:0)
将查询更改为使用DUAL而不是序列名称:
string query = "select MISSION_SEQ.NEXTVAL from DUAL";