的.edmx
<Property Name="uid" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
EF设置了StoreGeneratedPattern =&#34; Identity&#34;,但为什么我仍然无法保存到db?调试显示该值始终为0,猜测是非常正确的,因为服务器在插入之前没有将值返回到Web,但模型验证总是错误,我已经通过 C#, entity framework, auto increment 和 Autonumber with Entity Framework 但没有运气,我做错了什么?有什么想法吗?
更新1:
添加了模型和元数据图片,忘了提到我使用 EF DB优先来生成类
ASP.NET MVC视图
<div class="editor-field">
@Html.HiddenFor(model => model.uid)
</div>
ASP.NET MVC控制器
[HttpPost, ValidateJsonAntiForgeryToken]
public JsonResult Create(BasicUserInfo basicuserinfo)
{
if (ModelState.IsValid)
{
db.BasicUserInfoes.Add(basicuserinfo);
db.SaveChanges();
}
else
{
return Json(new { valid = "N", err = CaptureError() });
}
return Json(new { valid = "Y", route = Url.Action("Index") });
}
脚本
var self = this;
var data = "";
var _model = new model();
var data = JSON.stringify({ "BasicUserInfo": $(e.currentTarget).serializeObject() });
var _Create = new Create();
_Create.fetch({
type: 'POST',
headers: headers,
data: data,
contentType: "application/json; charset=UTF-8",
success: function (data, textStatus, jqXHR) {
if (textStatus.valid == "Y") {
_model.AppendAddSuccess(textStatus.route);
} else {
_model.AppendFailed(textStatus.err);
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus.statusText);
}
});
SQL Server 2008
错误
模态
元数据
答案 0 :(得分:1)
看起来Entity Framework没有将该属性识别为表字段。创建实体时,如果将其设置为IsIdentity = true,则也不需要为其主键指定html帮助器。如果EF识别该实体,它将自动为该字段生成主键。因此,您只需要其他字段的html助手。
确保您的model属性与数据库列的名称相同。在这种情况下,您的db列应该标题为uid
。如果您不想更改数据库表,可以使用Column
属性在模型中指定目标列。