EF代码首先和可选:可选关系

时间:2014-04-07 16:50:32

标签: entity-framework ef-code-first

根据msdn article,以下内容应创建可选:可选关系,但它会创建可选:多个关系。这篇文章错了吗?

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Optional_1>()
            .HasKey(o1 => o1.id1);

        modelBuilder.Entity<Optional_2>()
            .HasKey(o2 => o2.id2);

        modelBuilder.Entity<Optional_1>()
            .HasOptional(o1 => o1.Dependent)
            .WithOptionalPrincipal(o2 => o2.Principal);
    }

public class Optional_1
{
    public int id1 { get; set; }
    public Optional_2 Dependent { get; set; }
}

public class Optional_2
{
    public int id2 { get; set; }

    public Optional_1 Principal { get; set; }
}

谢谢

1 个答案:

答案 0 :(得分:1)

该表可能看起来像一对多,但实体框架会将其强制为可选:由于导航属性而可选。由于导航属性只是一个对象而不是集合,因此无法添加多个对象。

如果查看生成的表,它会为主表创建一个可为空的外键(Optional_1)。这允许您创建与Optional_1无关的Optional_2。

如果要在Optional_2中插入多行,并且在EF之外的Optional_1中具有相同的外键,则不会有任何阻止它通过的行。如果您尝试加载这些实体,则会出现错误。您无法为列添加唯一索引,因为它需要允许NULL,因为它是可选的。