我有两个实体模型,OptionWidget
和OptionWidgetValue
,OptionWidget
有许多OptionWidgetValue
类似于选项列表,有时其中一个值是默认值。我知道我可以在OptionWidgetValue
中再添加一个字段,例如Default
来实现这种关系。但是,当我尝试采用另一种方式,即在OptionWidget
中定义默认值时,我会遇到一些错误:
必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
以下是我的模型定义:
public class OptionWidget : ModelBase
{
[MaxLength(100)]
public string Name { get; set; }
public int? DefaultValueId { get; set; }
[ForeignKey("DefaultValueId")]
public virtual OptionWidgetValue DefaultValue { get; set; }
[Required]
public int ProductId { get; set; }
public virtual Product Product { get; set; }
public virtual ICollection<OptionWidgetValue> OptionWidgetValues { get; set; }
}
public class OptionWidgetValue : ModelBase
{
public string Value { get; set; }
public decimal UnitPrice { get; set; }
public virtual ICollection<ValueDependency> Dependencies { get; set; }
[Required]
public int OptionWidgetId { get; set; }
[ForeignKey("OptionWidgetId")]
public virtual OptionWidget OptionWidget { get; set; }
}
对于1-many关系,我用这样的流畅API定义它们并且它工作正常。但是我应该如何定义默认值的1-0..1关系。如果你知道的话请帮助我,非常感谢你。
builder.Entity<OptionWidget>()
.HasMany(e => e.OptionWidgetValues)
.WithRequired()
.HasForeignKey(e => e.OptionWidgetId)
.WillCascadeOnDelete(false);
答案 0 :(得分:0)
您可以使用以下Fluent API配置:
modelBuilder.Entity<OptionWidget>()
.HasOptional(e => e.DefaultValue)
.WithOptionalPrincipal();
此代码使关系方可选,但如果您想OptionWidget
需要make OptionWidgetValue
,请使用此选项:
modelBuilder.Entity<OptionWidget>()
.HasOptional(e => e.DefaultValue)
.WithRequired();