4

アルバムに多くのトラックがあり、トラックが 1 つのアルバムにしか存在できない音楽トラックとアルバムをモデリングしています。結合テーブルを使用して、アルバム リスト内の位置を指定します。

ここに私のモデルがあります:

public class Track
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int AlbumTrackId { get; set; }
    public virtual AlbumTrack AlbumTrack { get; set; }
}

public class Album
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<AlbumTrack> AlbumTracks { get; set; }
}

public class AlbumTrack
{
    public int AlbumId { get; set; }
    public virtual Album Album { get; set; }

    public int TrackId { get; set; }
    public virtual Track Track { get; set; }

    public int Position { get; set; }
}

と私の EntityTypeConfiguration

public class AlbumTrackConfiguration : EntityTypeConfiguration<AlbumTrack>
{

    public AlbumTrackConfiguration()
    {
        // AlbumTrack has a composite key
        HasKey(at => new {at.AlbumId, at.TrackId});

        // AlbumTrack has one Album, Albums have many AlbumTracks
        HasRequired(at => at.Album)
            .WithMany(a => a.AlbumTracks)
            .HasForeignKey(at => at.AlbumId)
            .WillCascadeOnDelete(true);

        // AlbumTrack has one Track, Tracks have one AlbumTrack
        HasRequired(at => at.Track)
            .WithRequiredPrincipal(t=>t.AlbumTrack)
            .WillCascadeOnDelete(true);
    }

}

Albums と AlbumTracks の間の 1 対多の関係は問題ありませんが、予想されることに加えて、

[AlbumTrackId] [int] NOT NULL,

Code First は追加を続けます

[AlbumTrack_AlbumId] [int] NOT NULL,
[AlbumTrack_TrackId] [int] NOT NULL

トラック テーブルに。

指定したプロパティのみがデータベース フィールドで変換されるように、トラックとアルバム トラックの関係をより適切にモデル化するにはどうすればよいですか?

[はい、私の世界ではトラックは 1 つのアルバムにしか存在できません!]

ありがとう。

4

2 に答える 2

0

正確な答えではありませんが、ポジションに中間テーブルが必要な理由がわかりません。なぜそうしないのですか:

public class Track
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Position { get; set; }
}

public class Album
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Track> Tracks { get; set; }
}
于 2013-04-01T12:50:28.173 に答える