关于EFCodeFirst关系的新手

时间:2013-02-11 12:47:02

标签: c# .net ef-code-first entity-framework-5

以下代码之间有什么区别?

 public class Album
{
    public int Id { get; set; }
    public string Title { get; set; }
    public List<Gener> Gener { get; set; }
}

public class Gener
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Albumcontext:DbContext
{
    public DbSet<Album> Albums { get; set; }
    public DbSet<Gener> Geners { get; set; }
}

enter image description here

 public class Album
{
    public int Id { get; set; }
    public string Title { get; set; }
    public Gener Gener { get; set; }
}

public class Gener
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Albumcontext:DbContext
{
    public DbSet<Album> Albums { get; set; }
    public DbSet<Gener> Geners { get; set; }
}

enter image description here

我知道关系2实体必须使用代码2但是如何使用List&lt;&gt;或集合&lt;&gt;? 抱歉我的英文不好

3 个答案:

答案 0 :(得分:1)

第一个创建关系“一个Album可以有多个Genres”,第二个创建“一个Album只能有一个Genre但是一个Genre可能与许多Albums“链接。

查看您的示例,您希望关系多对多,Album可能有一个或多个Genres,而Genre可能与一个或多个{Albums相关联1}}。

答案 1 :(得分:1)

Album课程的第一个区块中,您创建了一个属性Gener,即Gener个对象的列表 - 这意味着您希望一个Album拥有多个Geners {1}}:

public List<Gener> Gener { get; set; }

在同一个类的secound块中,您有一个Gener类型的属性Gener,因此它只指向类Gener的一个对象。这意味着您希望Album拥有一个Gener

public Gener Gener { get; set; }
顺便说一下,你有一个班级名字错字 - 我想你想要的是Genre,而不是Gener。

修改

要了解有关在实体框架中定义关系的更多信息,请查看this article

答案 2 :(得分:0)

在第一个示例中,AlbumGener之间存在多对一关系。由于每个Gener仅与Album Gener相关联,因此Album获取Gener的外键。

在第二个关系中,它只是一对一的关系,并且您在Album模型中引用了Album对象,因此Gener获取{{1}}的外键}。