簡體   English   中英

實體框架約定

[英]Entity framework conventions

我剛剛開始使用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; }
}

在我的模型一個游戲周期可能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);                    

    }

任何提示將非常感謝。

顯然您想在FixtureResult之間建立一對一的關系( Result實體不能在多個Fixture之間共享),對嗎? 在這種情況下,您的映射不是100%正確的。 你需要:

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

如果不添加WithRequired EF約定將假設WithMany ,即一對多而不是一對一的關系。

說到約定,您實際上可以刪除modelBuilder.Entity<Gameweek>().HasMany(g => g.Fixtures); Gameweek 所有 [Required]屬性和[Key]屬性。 僅需要上面的一對一映射和Result.FixtureID上的[Key]屬性。 其他所有內容將根據約定自動映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM