4

Playlist多対多の関係では、 のコレクションであるのシーケンスを維持したいと考えていMediaますChannel。シーケンスは、0 から int max までの int フィールドになります。

public class Channel
{
    public int ChannelId {get; set;}
    public string Name {get; set;}
    public ICollection<Media> Playlist {get; set;}
}

public class Media
{
    public int MediaId {get; set;}
    public string Name {get; set;}
    public string Location {get; set;}
    public ICollection<Channel> Channels {get; set;}
}

最初に Entity Framework コードを使用して、 と の間の多対多の関係を設計しChannelMedia、が Media 型Channelの項目を持ちPlaylist、順序シーケンスも維持できるようにします。

Entity Framework はChannelMedias、次のスキーマとのこの関係のテーブルを追加します

ChannelMedias
-----------------------------
Channel_ChannelId   (int)
Media_MediaId       (int)

次のようなシーケンス順序を維持するにはどうすればよいですか。

ChannelMedias
------------------------------
Channel_ChannelId   (int)
Media_MediaId       (int)
MediaSequence       (int)
4

2 に答える 2

7

デフォルトのエンティティ フレームワークではサポートされていません。関係を表すために、もう 1 つのエンティティー (ChanalMedia) を定義する必要があります。

public class Channel
{
    public int ChannelId {get; set;}
    public string Name {get; set;}
    public ICollection<ChanalMedia> ChanalMedias{get; set;}
}

public class ChanalMedia{
      public Channel Channel {get; set;}
      public Media Media {get; set;}
     //additional fields here..
}

public class Media
{
    public int MediaId {get; set;}
    public string Name {get; set;}
    public string Location {get; set;}
    public ICollection<ChanalMedia> ChanalMedias{get; set;}
}
于 2012-05-22T04:45:31.770 に答える
1

Playlist プロパティで Media エンティティの順序付けを可能にする構造を探しているということですね。これにはいくつかの方法があります。1 つのオプションは、Playlist クラスに Media を含め、それに PlaylistOrder プロパティを追加することです。

 public class Channel
    {
        public int ChannelId {get; set;}
        public string Name {get; set;}
        public ICollection<PlayListItem> Playlist {get; set;}
    }

    public class PlayListItem  
    {
        public int ID {get; set;}
        public int PlayListOrder {get; set;} 
        public Media Media {get; set;}
    }

    public class Media
    {
        public int MediaId {get; set;}
        public string Name {get; set;}
        public string Location {get; set;} 
    }

これにより、データベースの構造が少し変わりますが、必要な機能が提供されます。ただし、TimesPlayed、LateDatePlayed などのプロパティを PlayListItem に追加できるため、もう少し柔軟になる可能性があります。

于 2012-05-22T05:39:07.610 に答える