当1-0.1和1-many都是必需时,如何配置EF模型
本文关键字:何配置 配置 模型 EF 1-many | 更新日期: 2023-09-27 18:10:37
我有两个实体模型,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-多关系,我用像这样流畅的API定义它们,它工作得很好。但我该如何定义1-0…1关系为默认值。如果你知道,请帮助我,非常感谢。
builder.Entity<OptionWidget>()
.HasMany(e => e.OptionWidgetValues)
.WithRequired()
.HasForeignKey(e => e.OptionWidgetId)
.WillCascadeOnDelete(false);
您可以使用以下的Fluent API配置:
modelBuilder.Entity<OptionWidget>()
.HasOptional(e => e.DefaultValue)
.WithOptionalPrincipal();
这段代码使得关系的to侧是可选的,但是如果你想让OptionWidget
对OptionWidgetValue
是必需的,使用这个:
modelBuilder.Entity<OptionWidget>()
.HasOptional(e => e.DefaultValue)
.WithRequired();