我必须创建一个用户可以登录并创建和共享音乐播放列表的网站。我在Visual Studio中使用带有C#的Asp.net MVC。
每个播放列表是播放列表表格中的条目,并且具有字段PlaylistName,UserId(播放列表所属的用户的ID),以及播放列表中的轨道列表,以向量的形式(向量包含ID到轨道包含轨道表)或以对包含与此播放列表关联的轨道的表的引用的形式(因此播放列表表中的每个播放列表条目都有自己的表)。作为ASP.NET和数据库的新手,我不确定这些方法中的任何一种是否理想,甚至不知道如何实现它们。如果我使用矢量方法,我可以这样做:
namespace MvcApplication1.Models
{
public class Playlist
{
public string PlaylistName { get; set; }
public int UserId { get; set; }
public List<int> Tracks { get; set; }
}
public class PlaylistDBContext : DbContext
{
public DbSet<Playlist> Playlists { get; set; }
}
}
然后搭建模型?
对于另一种方法,我不确定如何使用visual studio进行设置。
答案 0 :(得分:2)
所以,如果我正确阅读这个你有一个有一堆曲目的播放列表? 添加一个ID到播放列表,像int一样
public class Playlist
{
public int ID {get;set;}
public string PlaylistName { get; set; }
public int UserId { get; set; }
public List<int> Tracks { get; set; }
}
我不知道你的跟踪对象是什么样的,所以我们假装它有一个名字和一个ID。 我假设每个曲目只属于一个播放列表。 如果是这样,请为每首曲目添加“播放列表ID”。
public class Track
{
public int ID {get;set;}
public int PlayListID {get;set;}
public string Name {get;set;}
}
现在,这会将曲目链接到播放列表。 如果您使用实体框架作为您的数据访问,并且它看起来像您,您可以添加虚拟属性,实体框架了解关系以获得您想要的。
所以你可以像这样添加“曲目”到播放列表类:
public class Playlist
{
public int ID {get;set;}
public string PlaylistName { get; set; }
public int UserId { get; set; }
public virtual ICollection<Track> Tracks{ get; set; }
}
无论何时使用track属性,它都会找到子记录。 类似地,在轨道子记录中,您可以添加以下“播放列表”属性,它将在需要时找到父级。
public class Track
{
public int ID {get;set;}
public int PlayListID {get;set;}
public string Name {get;set;}
public virtual Playlist Playlist {get;set;}
}
如果你正在使用带有codefirst迁移的实体框架6,这应该可行。
编辑::
如果您需要多对多的关系,那么您只需按如下方式更新曲目:
public class Track
{
public int ID {get;set;}
public string Name {get;set;}
public virtual ICollection<Playlist> Playlists {get;set;}
}
我删除了轨道上的播放列表ID,虚拟属性现在也是播放列表的集合。实体框架应自动创建引用表“Track_Playlists”或其间的任何内容。