EF 4.0 - CodeFirst One To Many - Fluent API

时间:2013-10-30 14:58:06

标签: entity-framework

我有以下两个类:

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
}


public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual IEnumerable<Person> Persons { get; set; }
}

如你所见,旅行可以有一个或多个人......

我尝试使用EntityConfiguration正确构建数据库,但我无法让它工作......我对它的使用感到很困惑:

public class TripConfiguration : EntityTypeConfiguration<Trip>
{
    internal TripConfiguration()
    {
        // ???

    }
}

我需要编写什么才能使应用程序正常运行:

  1. 我至少需要一个人。
  2. 我可能有更多那个人
  3. 一个人不能两次参加同样的旅行
  4. 一个人可以参加多次旅行

2 个答案:

答案 0 :(得分:1)

试试这个:

        this.HasRequired(x => x.Person)
            .WithMany(x => x.Trips)
            .HasForeignKey(x => x.PersonId);

你的课程:

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public virtual ICollection<Trip> Trips { get; set;}
}


public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int PersonId { get; set; }
    public virtual Person Person { get; set; }
}

据我所知,EF不支持独特的FK(如果我错了,还是纠正我......)。所以你必须自己检查一下。

答案 1 :(得分:0)

这不是一对多的关系,这是一个多对多的关系,你需要在关系的两边都有集合。 EF将代表您创建木匠表。从今天开始,只有在创建连接表时才需要在joiner表中创建一个唯一约束,以确保这种情况发生,因为EF通过配置尚未支持Unique Key约束,因此无法将其配置在行程中。

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public virtual ICollection<Trip> Trips { get; set; }
}


public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
}

然后

class PersonConfiguration : EntityTypeConfiguration<Person>
{
    public PersonConfiguration()
    {
         this.HasMany(t => t.Trips).WithMany(t => t.Persons);
    }
}