2011-01-02 1 views
2

J'ai un problème que je ne peux pas comprendre comment exprimer avec CTP5 de Code First et EF4.Beaucoup à plusieurs à plusieurs relations avec EF4 et le code d'abord

EDIT: Ajout mon ancien schéma en bas que je voudrais répliquer par CF

Voici mon scénario spécifique:

Une équipe est un concept abstrait; il devrait exister avec un ensemble spécifique de joueurs, dans une division spécifique, dans une saison spécifique.

Un exemple concret de cela en action de la NFL:

  • 1996 (saison) (division) Central AFC Houston Oilers (équipe)
  • 1997 (saison) AFC Central (division) Tennessee Oilers (équipe)
  • 1999 (saison) AFC Central (division) Titans du Tennessee (L'éQUIPE)
  • 2002 (saison) AFC Sud (division) Titans du Tennessee (L'éQUIPE)

Ce sont tous la même équipe. Je veux être en mesure de faire ce qui suit:

// Titans team id = 17 
var myTeam = myContext.Teams.Single(t => t.Id == 17) 

// display players 
foreach (var p in myTeam.Seasons[1999].Players) 
{ 
    // Do something with the p here 
} 

// Display current division 
Response.Write(myTeam.Seasons[2002].Division.Name); 

Je ne suis pas sûr de la syntaxe de requête spécifique dans une variable membre ICollection de myTeam.Seasons, mais le concept doit être le même pas moins. Quelqu'un peut-il nous éclairer sur la façon dont vous exprimeriez ce concept grâce à la CF dans EF4 CF CTP5? Comment pourriez-vous exprimer cela par Code First?

tables SQL actuelles

CREATE TABLE dbo.Season 
(
    Id    INT IDENTITY(1,1)  NOT NULL, 
    LeagueId   INT     NOT NULL, 
    [Name]   NVARCHAR(50)   NOT NULL, 
    [Year]   CHAR(4)    NOT NULL, 
    PrevSeasonId  INT   NULL 

) ON [PRIMARY]; 

// Primary key 
ALTER TABLE dbo.Season WITH NOCHECK ADD 
    CONSTRAINT PK_Season PRIMARY KEY NONCLUSTERED (Id) ON [PRIMARY]; 

CREATE TABLE dbo.Division 
(
    Id  INT IDENTITY(1,1)  NOT NULL, 
    DefaultName NVARCHAR(50)   NOT NULL 
) ON [PRIMARY]; 

// Primary key 
ALTER TABLE dbo.Division WITH NOCHECK ADD 
    CONSTRAINT PK_Division PRIMARY KEY NONCLUSTERED (Id) ON [PRIMARY]; 

// Key Relation Table 
CREATE TABLE dbo.DivisionsInSeason 
(
    DivisionId  INT     NOT NULL, 
    SeasonId  INT     NOT NULL, 
    DefaultName NVARCHAR(50)   NOT NULL, 
    Commissioner UNIQUEIDENTIFIER  NOT NULL, 
    ParentDivId INT    NULL 
) ON [PRIMARY]; 

// Primary Key 
ALTER TABLE dbo.DivisionsInSeason WITH NOCHECK ADD 
    CONSTRAINT PK_DivisionsInSeason PRIMARY KEY NONCLUSTERED (DivisionId, SeasonId) ON [PRIMARY] ; 

// Foreign Keys  
ALTER TABLE dbo.DivisionsInSeason WITH CHECK ADD 
    CONSTRAINT FK_DivisionsInSeason_Division FOREIGN KEY(DivisionId) REFERENCES dbo.Division(Id), 
    CONSTRAINT FK_DivisionsInSeason_Season FOREIGN KEY(SeasonId) REFERENCES dbo.Season(Id), 
    CONSTRAINT FK_DivisionsInSeason_User FOREIGN KEY(Commissioner) REFERENCES dbo.[User](Id); 

CREATE TABLE dbo.Team 
(
    Id  INT IDENTITY(1,1)  NOT NULL, 
    DefaultName  NVARCHAR(50)   NOT NULL, 
    DefShortName  NCHAR(3)   NULL 
) ON [PRIMARY]; 

// Primary key 
ALTER TABLE dbo.Team WITH NOCHECK ADD 
    CONSTRAINT PK_Team PRIMARY KEY NONCLUSTERED (Id) ON [PRIMARY] ; 

// Key relationship table 
CREATE TABLE dbo.TeamsInDivision 
(
    TeamId   INT    NOT NULL, 
    DivisionId  INT    NOT NULL, 
    SeasonId  INT    NOT NULL, 
    GeneralManager UNIQUEIDENTIFIER NOT NULL, 
    Name   NVARCHAR(50)  NOT NULL, 
    ShortName  NCHAR(3)   NULL 

) ON [PRIMARY]; 

// Check Constraints 
ALTER TABLE dbo.TeamsInDivision ADD 
    CONSTRAINT PK_TeamsInDivision PRIMARY KEY NONCLUSTERED (TeamId, DivisionId, SeasonId) ON [PRIMARY]; 

// Foreign Keys  
ALTER TABLE dbo.TeamsInDivision WITH CHECK ADD 
    CONSTRAINT FK_TeamsInDivision_Team FOREIGN KEY(TeamId) REFERENCES dbo.Team(Id), 
    CONSTRAINT FK_TeamsInDivision_Division FOREIGN KEY(DivisionId) REFERENCES dbo.Division(Id), 
    CONSTRAINT FK_TeamsInDivision_Season FOREIGN KEY(SeasonId) REFERENCES dbo.Season(Id), 
    CONSTRAINT FK_TeamsInDivision_User FOREIGN KEY(GeneralManager) REFERENCES dbo.[User](Id); 

Répondre

Questions connexes