0

我有以下两个课程:

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; }
}

如您所见,一次旅行可以有 1 个或多个人...

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

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

    }
}

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

  1. 我至少需要一个人。
  2. 我可能有不止一个人
  3. 一个人不能在同一行程中两次
  4. 一个人可以不止一次旅行
4

2 回答 2

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(如果我错了,请纠正我..)。所以你必须自己检查。

于 2013-10-30T15:08:24.287 回答
0

这不是一对多关系,这是多对多关系,你需要在关系的两边都有集合。EF 将代表您创建连接器表。因为今天你不能只配置一个人在旅行中,一旦你需要在你的连接表中创建一个唯一约束,以确保发生这种情况,因为 EF 还不支持通过配置的唯一键约束。

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);
    }
}
于 2013-10-30T15:19:03.317 回答