2013-10-30 66 views
0

我有以下两类:EF 4.0 - CodeFirst一对多 - 流利的API

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. 一个人可以在一个以上的行程

回答

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

+0

我编辑我的问题。一个人可能不能同时出差一次以上。但一个人可以多次旅行。 – Baral

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