1

使用 Entity Framework Fluent API,可以在两个参与类上定义关系。我想知道这两种解决方案是否有优点或缺点。

让我演示一下。我有这些课程:

public class GroupOfAnimals
{
    public int ID { get; set; }
    public virtual ICollection<Animal> Members { get; set; }
}

public class Animal
{
    public int ID { get; set; }
    public int GroupID { get; set; }
    public virtual GroupOfAnimals Group { get; set; }
}

和配置:

public class GroupOfAnimalsConfiguration : EntityTypeConfiguration<GroupOfAnimals>
{
    public GroupOfAnimalsConfiguration ()
    {
        HasKey(o => o.ID);

        //Defining relationship #1
        HasMany(o => o.Members)
            .WithRequired(o => o.Group)
            .HasForeignKey(o => o.GroupID);

    }
}

public class AnimalConfiguration : EntityTypeConfiguration<Animal>
{
    public AnimalConfiguration()
    {
        HasKey(o => o.ID);

        //Defining relationship #2
        HasRequired(o => o.Group)
            .WithMany(o => o.Members)
            .HasForeignKey(o => o.GroupID);
    }
}

如您所见,两种配置都包含相同的一对多关系。这显然是多余的。

相比之下,使用属性很清楚在这种情况下会发生什么:

public class GroupOfAnimals
{
    [Key]
    public int ID { get; set; }
    [InverseProperty("Group")]
    public virtual ICollection<Animal> Members { get; set; }
}

public class Animal
{
    [Key]
    public int ID { get; set; }
    [ForeignKey("Group ")]
    public int GroupID { get; set; }
    [InverseProperty("Members")]
    public virtual GroupOfAnimals Group { get; set; }
}

我的问题是:

我应该在哪里定义关系?在群里?在动物身上?有什么区别吗?我应该在这里遵循一个明确的约定吗?

4

1 回答 1

1

可以在任一端定义关系。这取决于你想怎么做,但你可能应该以你选择的任何方式保持一致。

使用一种或另一种方式没有任何优势,它们只是让您可以灵活地以对您最有意义的方式定义它们。无论哪种方式,您最终都会建立相同的关系。

于 2014-12-06T04:59:35.747 回答