1

我刚刚开始使用 Entity 框架,并创建了我的存储库和上下文类和接口,并定义了我的 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; }
}

在我的模型中,Gameweek可能包含 0-20个固定装置。比赛周中的每一场比赛都有一个结果

我是否使用类和以下约定正确建模:

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

    }

任何提示将非常感谢。

4

1 回答 1

1

Fixture显然你想在and之间建立一对一的关系Result(一个Result实体不能在多个Fixtures 之间共享),对吧?在这种情况下,您的映射不是 100% 正确的。你需要:

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

如果您不添加WithRequiredEF 约定,将假定一个WithMany,即一对多而不是一对一的关系。

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

于 2013-06-18T22:21:14.463 回答