我正在使用Entity Framework 6 Code First MVC5。这是我的课程:
Offer.cs
public class Offer
{
public int Id { get; set; }
[Required]
public string ListOffer { get; set; }
}
这是我的控制器
[HttpPost]
public ActionResult Create(OfferFormViewModel viewModel)
{
var offer = new Offer
{
ListOffer = viewModel.ListOffer,
};
_context.Offers.Add(offer);
_context.SaveChanges();
return RedirectToAction("MyOffers", "Offers");
}
OfferFormViewModel.cs
public class OfferFormViewModel {
public int Id { get; set; }
[Required]
public string ListOffer { get; set; }
}
当我尝试在商品表中插入记录时,它在我的机器上正常工作并在数据库中插入记录,它会自动为id列分配值。但是当我部署应用程序时,它会抛出异常
System.Data.SqlClient.SqlException:无法将值NULL插入列' Id',table' DefaultConnection.dbo.Offers&#39 ;;专栏 不允许空值。 INSERT失败。声明已经终止。
我的问题是,为什么在部署应用程序时尝试在Id列中插入NULL而不是在没有部署的情况下运行代码?
答案 0 :(得分:1)
您应该使用数据注释自动增量:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
或FluentAPI
modelBuilder.Entity<Offers>()
.Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
答案 1 :(得分:1)
使用此模型并使用迁移更新数据库您可以通过以下步骤执行此操作:
打开工具&gt; NuGet包管理器&gt;包管理器控制台。
在程序包管理器控制台
enable-migrations
输入add-migration {name}
(确保您的应用程序可以构建而没有任何错误)。
输入update-database
。
public class Offer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string ListOffer { get; set; }
}
答案 2 :(得分:0)
当我部署应用程序时,我将数据库复制到服务器。在服务器上,Id列未设置为主键,也不是标识列。我认为在将数据库复制到服务器时出现了问题。这就是它抛出异常的原因。