2 Stimmen

Viele bis viele bis viele Beziehungen zu EF4 und Code First

Ich habe ein Problem, bei dem ich nicht weiß, wie ich es mit CTP5 von Code First und EF4 ausdrücken kann.

EDIT: Unten habe ich mein altes Schema hinzugefügt, das ich gerne über CF replizieren würde

Hier ist mein spezielles Szenario:

Ein Team ist ein abstraktes Konzept; es sollte aus einer bestimmten Gruppe von Spielern bestehen, in einer bestimmten Liga, in einer bestimmten Saison.

Ein konkretes Beispiel dafür ist die NFL:

  • 1996 (Saison) AFC Central (Division) Houston Oilers (Mannschaft)
  • 1997 (Saison) AFC Central (Division) Tennessee Oilers (Mannschaft)
  • 1999 (Saison) AFC Central (Division) Tennessee Titans (Mannschaft)
  • 2002 (Saison) AFC South (Division) Tennessee Titans (Mannschaft)

Es handelt sich um ein und dasselbe Team. Ich möchte in der Lage sein, das Folgende zu tun:

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

Ich bin mir der spezifischen Abfragesyntax innerhalb einer ICollection-Mitgliedsvariable von myTeam.Seasons nicht sicher, aber das Konzept sollte dennoch dasselbe sein.

Kann mir jemand erklären, wie Sie dieses Konzept in EF4 CF CTP5 durch CF ausdrücken würden? Wie würden Sie dies durch Code First ausdrücken?

Aktuelle SQL-Tabellen

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

0voto

João Vieira Punkte 1104

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X