如果需要1-0..1和1-many,如何配置EF模型

时间:2015-08-31 14:15:12

标签: c# entity-framework

我有两个实体模型,OptionWidgetOptionWidgetValueOptionWidget有许多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);

1 个答案:

答案 0 :(得分:0)

您可以使用以下Fluent API配置:

modelBuilder.Entity<OptionWidget>()
    .HasOptional(e => e.DefaultValue)
    .WithOptionalPrincipal();

此代码使关系方可选,但如果您想OptionWidget需要make OptionWidgetValue,请使用此选项:

modelBuilder.Entity<OptionWidget>()
    .HasOptional(e => e.DefaultValue)
    .WithRequired();