EF Core:具有ValueGeneratedOnAdd列的列"无法为标识列插入显式值..."

时间:2018-03-13 19:37:41

标签: c# entity-framework .net-core aws-lambda entity-framework-core

我有使用Entity Framework 6.2的ASP.NET MVC 5应用程序。此应用程序在MS SQL服务器中创建一些记录。

我必须在AWS lambda函数中处理这些记录。为此,我创建了c#.NET Core v2.0 lambda函数。在那里,我根据现有数据库生成模型,如下一篇文章所述 - Getting Started with EF Core on ASP.NET Core with an Existing Database

生成的模型如下所示:

public partial class Request
{
    public int EntityId { get; set; }   
    public Result Result { get; set; }
}
public partial class Result
{
    public int EntityId { get; set; }
    public Request Entity { get; set; }
}

和OnModelCreating:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Request>(entity =>
    {
        entity.HasKey(e => e.EntityId);
        entity.ToTable("Request", "mySchema");
    });

    modelBuilder.Entity<Result>(entity =>
    {
        entity.HasKey(e => e.EntityId);
        entity.ToTable("Result", "mySchema");
        entity.HasIndex(e => e.EntityId).HasName("IX_EntityId");
        entity.Property(e => e.EntityId).ValueGeneratedOnAdd();
        entity.HasOne(d => d.Entity)
            .WithOne(p => p.Result)
            .HasForeignKey<Result>(d => d.EntityId)
            .OnDelete(DeleteBehavior.ClientSetNull)
            .HasConstraintName("FK_mySchema.Result_mySchema.Request_EntityId");
    });
}

在lambda函数中,我正在处理请求并设置结果:

using (var db = new DataContext(connection))
{
    var request = db.Request.First();    
    request.Result = new Result();
    db.SaveChanges();
}

在保存操作中,我得到了例外:

无法在表格中插入标识列的显式值&#39;结果&#39;当IDENTITY_INSERT设置为OFF时。

我检查了解决此问题的不同方法。但是在模型创建方法中已经设置了ValueGeneratedOnAdd函数。

另外,我尝试将[DatabaseGenerated(DatabaseGeneratedOption.Identity)]添加到Result.EntityId - 但没有成功。

我在实施中遗漏了什么?

1 个答案:

答案 0 :(得分:0)

您正在尝试使用没有值的新Result()初始化request.Result。这可能会导致此错误。