【发布时间】:2014-08-13 05:57:40
【问题描述】:
我首先使用实体框架代码创建了一个数据库。但是当 Create 视图中的表单发布到 (post)Create 动作时,每个项目对象的 id 始终为 0。因此 Model.State 始终为 false。所以我无法将项目类的对象保存到数据库中。我尝试使用 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 增加 id。但它仍然需要零。
我在创建操作(帖子)中的错误消息是“需要 projectID 字段。”
我的项目类:
public class Project
{
[Column(Order = 100)]
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int projectID { get; set; }
public string projectName { get; set; }
public string descriptionProject { get; set; }
public Project parentProject { get; set; }
}
我的项目控制器:
// GET: Projects/Create
public ActionResult Create()
{
var projectList = db.Projects.ToList().Select(
c => new SelectListItem
{
Selected = false,
Text = c.projectName,
Value = c.projectID.ToString()
}
).ToList();
ViewData["ProjectList"] = projectList;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "projectID,projectName,descriptionProject,identifier,date")] Project project)
{
var projectList = db.Projects.ToList().Select(
c => new SelectListItem
{
Selected = false,
Text = c.projectName,
Value = c.projectID.ToString()
}
).ToList();
ViewData["ProjectList"] = projectList;
if (ModelState.IsValid)
{
db.Projects.Add(project);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(project);
}
我的创建视图:
@model BulguTakipSistemiv2.Models.Project
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<form class="form-horizontal">
<fieldset>
<legend>Project</legend>
<div class="form-group">
@Html.LabelFor(model => model.projectName, new { @class = "col-lg-2 control-label" })
<div class="col-lg-10">
<p>@Html.EditorFor(model => model.projectName, new { @class = "form-control" })</p>
@Html.ValidationMessageFor(model => model.projectName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.descriptionProject, new { @class = "col-lg-2 control-label" })
<div class="col-lg-10">
<p>@Html.EditorFor(model => model.descriptionProject, new { @class = "form-control" })</p>
@Html.ValidationMessageFor(model => model.descriptionProject)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.parentProject, new { @class = "col-lg-2 control-label" })
<div class="col-lg-10">
<p>@Html.DropDownListFor(model => model.projectID, (IEnumerable<SelectListItem>)ViewData["ProjectList"], " --Select Parent Project--")</p>
@Html.ValidationMessageFor(model => model.parentProject)
</div>
</div>
<div class="form-group">
<p class="col-lg-12">
<input type="submit" value="Create" class="btn btn-primary btn-lg" />
</p>
</div>
</fieldset>
</form>
}
提前致谢。另外我的连接字符串如下:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-BulguTakipSistemiv2-20140812112012yeni6;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-BulguTakipSistemiv2-20140812112012.mdf" providerName="System.Data.SqlClient" />
<add name="DBContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=BulguTakipSistemiv2yeni6;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
【问题讨论】:
-
您使用哪些 dbms?
-
我所知道的唯一支持 AI 的 dbms 是 MySQL。可以通过使用触发器来连接其他 dbms。您使用的是什么 DBMS?
-
我正在使用 SQL Server 2012 Express LocalDB。
-
你能检查一下数据库端的“projectID”字段是否真的设置了“Identity”属性吗?
标签: c# asp.net-mvc entity-framework