2

CodeFirstのCTP5とEF4で表現する方法がわからないという問題があります。

編集:CFを介して複製したい古いスキーマを下部に追加しました

これが私の特定のシナリオです:

チームは抽象的な概念です。それは、特定のシーズンに、特定の部門で、特定のプレーヤーのセットと共に存在する必要があります。

NFLからのこれの実際の具体例:

  • 1996年(シーズン)AFCセントラル(部門)ヒューストンオイラーズ(チーム)
  • 1997年(シーズン)AFCセントラル(ディビジョン)テネシーオイラーズ(チーム)
  • 1999年(シーズン)AFCセントラル(ディビジョン)テネシータイタンズ(チーム)
  • 2002年(シーズン)AFC南地区(ディビジョン)テネシータイタンズ(チーム)

これらはすべて同じチームです。私は次のことができるようになりたいです:

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

myTeam.SeasonsのICollectionメンバー変数内の特定のクエリ構文はわかりませんが、それでも概念は同じである必要があります。

EF4 CF CTP5のCFを通じてこの概念をどのように表現するかについて、誰かが光を当てることができますか?これをCodeFirstでどのように表現しますか?

現在のSQLテーブル

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

1 に答える 1

0

多分これは役に立つかもしれません

http://blogs.microsoft.co.il/blogs/gilf/archive/2011/08/01/creating-a-many-to-many-mapping-using-code-first.aspx

于 2011-09-06T20:25:16.323 に答える