我正在尝试在Azure上添加一个简单的条目至我的数据库,但是出于某种原因,该数据库没有为该条目生成主键。
以下是创建数据库和进行条目操作所使用的所有代码。
这是在控制台应用程序上使用EF 6.1实现的。
public BlizzardDbContext() : base("AzureSqlDb")
{
}
public DbSet<Maintenance> Maintenances { get; set; }
模型
public class Maintenance
{
public Maintenance()
{}
public Maintenance(DateTime start, DateTime end, string info)
{
Start = start;
End = end;
Info = info;
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MaintenanceId { get; set; }
public DateTime? Start { get; set; }
public DateTime? End { get; set; }
public string Info { get; set; }
}
保存更改时失败的测试
var context = new BlizzardDbContext();
context.Maintenances.Add(new Maintenance() {Start = DateTime.Now, End = DateTime.Now, Info = ""});
context.SaveChanges();
我知道这听起来很简单,我以前用过EF几次,但是这一次我无法弄清楚出了什么问题 下面是错误信息:
"无法将值NULL插入列“MaintenanceId”,表“.dbo.Maintenances”中,该列不允许为空。 插入失败。\r\n已终止该语句。"
更新:最终通过删除数据库并重新创建来解决此问题,我认为EF存在一些奇怪的问题,它没有正确地使用迁移更新数据库,因为在重新创建后,列被设置为Identity。
ALTER TABLE [dbo].[Maintenances] ADD CONSTRAINT [PK_dbo.Maintenances] PRIMARY KEY CLUSTERED ([MaintenanceId] ASC);
- Toxicable