一对零或一关系:当 IDENTITY_INSERT 为 OFF 时,无法为表中的标识列插入显式值

Nim*_*hew 5 c# asp.net entity-framework

我有两个实体:

public class Subscription
{
    public int SubscriptionId { get; set; }

    public virtual ICollection<SubscriptionError> SubscriptionErrors { get; set; }
}

public class SubscriptionError
{
    public int SubscriptionErrorId { get; set; }
    public int SubscriptionId { get; set; }

    public virtual Subscription Subscription { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

最初,我将它们之间的关系定义为一对多,SubscriptionErrorMap如下所示:

this.HasRequired(t => t.Subscription)
            .WithMany(t => t.SubscriptionErrors)
            .HasForeignKey(d => d.SubscriptionId)
            .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码来保存 SubscriptionError:

context.SubscriptionErrors.Add(subscriptionError);
Run Code Online (Sandbox Code Playgroud)

subscriptionError实体在哪里,我没有明确设置主键字段。

这曾经工作得很好。但是,当我将此关系更改为 时one to zero-or-one,它开始在保存时抛出以下异常:

当 IDENTITY_INSERT 设置为 OFF 时,无法为表“SubscriptionError”中的标识列插入显式值。

新的映射是:

this.HasRequired(t => t.Subscription)
            .WithOptional(t => t.SubscriptionError)
            .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

映射有问题吗?

Nim*_*hew 1

这对我有用:

删除 PK 字段SubscriptionErrorId并将SubscriptionId的 PK 和 FK 设置为SubscriptionError

实体现在如下所示:

public class Subscription
{
     public int SubscriptionId { get; set; }

     public virtual SubscriptionError SubscriptionError { get; set; }
}

public class SubscriptionError
{
    [ForeignKey("Subscription")]
    public int SubscriptionId { get; set; }

    [Required]
    public virtual Subscription Subscription { get; set; }
}
Run Code Online (Sandbox Code Playgroud)