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)
映射有问题吗?
这对我有用:
删除 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)