2013-06-18 2 views
1

방금 ​​Entity 프레임 워크에 대한 작업을 시작했으며 리포지토리 및 컨텍스트 클래스와 인터페이스를 만들고 POCO를 정의했으며 현재 컨벤션 작업이 어떻게 진행되고 있지만 어려움을 겪고 있는지 이해하려고 노력하고 있습니다. 그렇게 할 수 없다.엔터티 프레임 워크 규칙

I가 다음과 같은 2 개 POCO 클래스 :

Gameweek

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 설비 사이에 포함 할 수 있습니다. gameweek의 각 조명기에는 결과가입니다.

내가 클래스와 다음 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

은 분명히 당신은 오른쪽 (복수 사이 Fixture의를 공유 할 수없는 Result 개체) FixtureResult 사이에 일대일 관계를 갖고 싶어? 이 경우 매핑이 100 % 정확하지 않습니다. 당신은 필요

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

당신이 WithMany을 가정합니다 WithRequired EF 규칙을 추가하지 않으면, 즉 일대 대신 일대일 관계.

규칙의 말하기, 당신은 실제로 modelBuilder.Entity<Gameweek>().HasMany(g => g.Fixtures);, 모든[Required] 속성을 제거하고 Gameweek에서 [Key] 속성 수 있습니다. 위의 일대일 매핑과 [Key] 속성은 Result.FixtureID에 있어야합니다. 다른 모든 것은 규칙에 따라 자동으로 매핑됩니다.

+0

안녕하세요, 슬레 마, 답장을 보내 주셔서 감사합니다. Gameweek Entity에 필요한 협약이 없습니까? 조명기는 어떻게 그 대응하는 gameweek와 연결되어 있습니까? – Jay

+1

@Jay : EF는'Gameweek.Fixtures' 콜렉션을 봅니다. 그로부터 관례에 따라 일대 다 (one-to-many) 관계를 추론합니다. 그런 다음 'Fixture.GameweekID' 속성을보고 이것이 관계의 FK 속성이라고 가정합니다 (이름 지정 규칙에 따라). 그것은 null이 허용되지 않는'int'이기 때문에 관계는 * 필수 *이며 선택적이 아니라고 추론합니다. – Slauma

+0

Slauma에 대한 좋은 설명에 대한 감사합니다. 나는 도움을 주신 것에 감사드립니다. – Jay