4

在多对多关系中,我想保持for a 的Playlist集合的序列。该序列将是一个从 0 到 int max 的 int 字段。MediaChannel

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

首先使用实体​​框架代码我想设计和之间的多对多关系ChannelMedia以便Channel将具有Playlist媒体类型的项目并保持顺序顺序。

实体框架将ChannelMedias为此关系添加一个具有以下架构的表

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

我怎样才能保持这样的顺序:

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

2 回答 2

7

默认实体框架不支持它。您需要再定义一个实体(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 属性中对媒体实体进行排序。有几种方法可以解决这个问题。一种选择是让 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;} 
    }

这会稍微改变数据库的结构,但会提供您需要的功能。它可能更灵活一些,但是您可以向 PlayListItem 添加更多属性,例如 TimesPlayed、LateDatePlayed 等

于 2012-05-22T05:39:07.610 回答