EntityFramework - 与Artist模型的一对一关系

时间:2017-06-13 14:21:16

标签: entity-framework data-modeling

所以我有两个模特:艺术家和专辑。

艺术家:

public class Artist
{
    public int ArtistID { get; set; }
    public string Name { get; set; }
    public virtual List<Album> Albums { get; set; }
}

专辑:

public class Album
{
    public int AlbumID { get; set; }
    public string Title { get; set; }
    public Artist Artist { get; set; }
    public virtual List<Review> Review { get; set; }
}

每位艺术家都可以拥有多张专辑。 我希望每个艺术家都与一个用户身份联系在一起。

我正在为我的项目使用个人帐户身份验证,因此我基本上希望在艺术家和已经通过选择个人帐户设置的用户身份之间建立一对一的关系。

此外,还有更好的方法吗?我想要的是每个经过身份验证的用户都可以拥有多个专辑。

更新 使用实体框架的代码优先方法。

1 个答案:

答案 0 :(得分:0)

您可以使用[ForeignKey("UserId")] DataAnnotation属性在AspnetUsers和Artist模型之间创建关系。我认为你需要艺人和专辑模特课之间的一对多关系,因为在这种情况下,任何艺术家都可以有多个专辑。您可以使用以下代码并添加迁移。

相册型号:

public class Album
{
    public Album(){

    }

    public int AlbumID { get; set; }

    public string Title { get; set; }

    public virtual ICollection<Artist> Artists { get; set; }

    public virtual List<Review> Review { get; set; }

}

艺术家模型:

public class Artist
{
    public Artist() 
    {
        this.Albums = new HashSet<Album>();
    }

    public int ArtistID { get; set; }

    [ForeignKey("UserId")]
    public ApplicationUser User { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Album> Albums { get; set; }

}

模型构建器部分:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        //one-to-many 
        modelBuilder.Entity<Album>()
                    .HasRequired<Artist>(s => s.Artist) // Album entity requires Artist 
                    .WithMany(s => s.Artists); // Album entity includes many Artist entities

}