如何在asp.net mvc中为另一个表中的条目添加表引用?

时间:2013-11-19 13:04:30

标签: c# asp.net sql asp.net-mvc

我必须创建一个用户可以登录并创建和共享音乐播放列表的网站。我在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进行设置。

1 个答案:

答案 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”或其间的任何内容。