我有一个mvc5应用程序,我试图在我的模型中创建新行。 但是表的主键总是按顺序排列。
但是我希望我提供的密钥可以用作主键。 我是MVC的新手,我不确定我在这里做错了什么。
这是我的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ProviderId,ProviderName")] Provider provider)
{
if (ModelState.IsValid)
{
db.Providers.Add(provider);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(provider);
}
我可以看到,在提供程序中调试该值时,我是从视图中输入的。
以下是我的观点:
<div class="form-group">
@Html.LabelFor(model => model.ProviderId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ProviderId, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.ProviderId, "", new { @class = "text-danger" })
</div>
@Html.LabelFor(model => model.ProviderName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ProviderName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.ProviderName, "", new { @class = "text-danger" })
</div>
</div>
这是我的模特课:
public class Provider
{
[Key]
public int ProviderId { get; set; }
public string ProviderName { get; set; }
}
public class ProviderDBContext : DbContext
{
public DbSet<Provider> Providers { get; set; }
}
我希望我在视图中输入的内容在我的表格中保存为ProviderId。
请帮忙。
答案 0 :(得分:1)
您需要让EF知道您希望手动定义ProviderID。一种方法是扩展EntityTypeConfiguration。
public class ProviderConfig: EntityTypeConfiguration<Provider>
{
public ProviderConfig()
{
this.Property(p => p.ProviderID)
.HasColumnName("provider_id")
.HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);
}
}
之后,您需要覆盖OnModelCreating并注册您的配置类。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProviderConfig());
}