2013-06-18 77 views
1

我刚刚开始使用Entity框架,并创建了我的Repository和上下文类和接口,并定义了我的POCO,现在我正试图了解这些约定是如何工作的,但是遇到困难并且迄今为止无法这样做。实体框架约定

我有以下2 POCO类:

游戏周期

public class Gameweek 
{ 
    [Key][Required] 
    public int GameweekID { get; set; } 

    [Required] 
    public DateTime StartDate { get; set; } 

    [Required] 
    public DateTime Deadline { get; set; } 

    [Required] 
    public int NumberFixtures { get; set; } 

    public virtual ICollection<Fixture> Fixtures { get; set; } 

    public virtual ICollection<Result> Results { get; set; } 
} 

夹具

public class Fixture 
{ 
    [Key][Required] 
    public int FixtureID { get; set; } 

    [Required] 
    public int GameweekID { get; set; } 

    [Required] 
    public string HomeTeam { get; set; } 

    [Required] 
    public string AwayTeam { get; set; } 

    public virtual Result Result { get; set; } 
} 

结果

public class Result 
{ 
    [Key][Required] 
    public int FixtureID { get; set; } 

    [Required] 
    public int HomeGoals { get; set; } 

    [Required] 
    public int AwayGoals { get; set; } 
} 

在我的模型游戏周期可以0-20 灯具之间包含的内容。比赛周中的每个灯具都有一个结果

我是用类和以下convetions正确模拟这种:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove < PluralizingTableNameConvention>(); 

     //Table relationships defined here 
     modelBuilder.Entity<Gameweek>() 
      .HasMany(g => g.Fixtures);     

     modelBuilder.Entity<Fixture>() 
      .HasOptional(f => f.Result);      

    } 

任何提示将不胜感激。

回答

1

显然,你希望有FixtureResult之间的一个一对一的关系(一个Result实体之间的倍数不能共享Fixture S),对不对?在这种情况下,您的映射不是100%正确的。您需要:

​​

如果不加WithRequired EF约定将承担WithMany,即一到多,而不是一比一的关系。

说到约定的,实际上你可以删除modelBuilder.Entity<Gameweek>().HasMany(g => g.Fixtures);所有[Required]属性和Gameweek[Key]属性。只需要上面的一对一映射和Result.FixtureID上的[Key]属性。其他一切都会根据惯例自动映射。

+0

嗨Slauma,谢谢你的回复。 Gameweek实体是否没有需要的约定?那么这些装置如何与他们相应的比赛周相关联? – Jay

+1

@Jay:EF看到了'Gameweek.Fixtures'集合。由此推断按惯例一对多的关系。然后它看到'Fixture.GameweekID'属性并假定这是关系的FK属性(我相信通过命名约定)。因为它是一个不可为空的'int',所以它会推断出该关系是*必需*而不是可选的。 – Slauma

+0

不错,在Slauma谢谢你的解释我已经完成了所有我认为感谢的帮助:) – Jay