代码优先实体框架不创建一对多关系

本文关键字:创建 一对多 关系 框架 实体 代码 | 更新日期: 2023-09-27 18:18:18

我有一个类(Article),它应该与另一个类(Category)有一对多的关系:

public class Article
{
  [Key]
  public int ArticleId { get; set;}
  public virtual List<Category> Categories { get; set; }
}
public class Category
{
  [Key]
  public int Id { get; set;}
  public string Caption { get; set;
}

当我让Code First构建数据库时,它生成了与Article有一对一关系的Category。这将导致"类别"只与单个文章相关。删除和重新创建数据库仍然会产生这个问题。知道我哪里做错了吗?

代码优先实体框架不创建一对多关系

1)如果您的Article有多个Category,但Categories只有一个Article:

public class Article{
    private ICollection<Category> _CategoryList;
    public int ArticleId { get; set;}
    public virtual ICollection<Category> CategoryList {
        get { return _CategoryList = _CategoryList?? new HashSet<Category>(); }
        set { _CategoryList= value; }
    }
}
public class Category{
    public int Id { get; set;}
    public string Caption { get; set;}
    public Article Article { get; set;}
}

这听起来有点不合逻辑。

2)如果你的Category有多个Article,而Article只有一个Category:

public class Article{
    public int ArticleId { get; set;}
    public Category Category { get; set;}
}
public class Category{
    private ICollection<Article> _ArticleList;
    public int Id { get; set;}
    public string Caption { get; set;}
    public virtual ICollection<Article> ArticleList {
        get { return _ArticleList= _ArticleList?? new HashSet<Article>(); }
        set { _ArticleList= value; }
    }
}

注意,如果属性名中有关键字Id,则不需要[Key]。EF自动将属性视为Key