如何在EF中创建相互一对一或一对一的关系和导航属性?

时间:2016-09-08 12:53:33

标签: entity-framework relationship

我很难在EF代码中首先获得这个概念。基本上它是2个表,彼此有外键。这两种关系应该是一对一或零。即都是可选的。 enter image description here

这是我的尝试:

  public class Blog
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int BlogId { get; set; }
    public string Name { get; set; }

    [ForeignKey("PostId")]
    public virtual Post Post { get; set; }
    public int? PostId { get; set; }
  }

  public class Post
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PostId { get; set; }
    public string Title { get; set; }

    [ForeignKey("BlogId")]
    public virtual Blog Blog { get; set; }
    public int? BlogId { get; set; }
  }

但是,这当然最终会出现这个错误:

  

无法确定之间关联的主要结束   类型'EFTest.Models.Post'和'EFTest.Models.Blog'。主要目的   必须使用以下任一方式显式配置此关联   关系流畅的API或数据注释

好的,我尝试这样的事情:

  modelBuilder.Entity<Blog>()
    .HasOptional(b => b.Post)
    .WithOptionalPrincipal(p => p.Blog);

  modelBuilder.Entity<Post>()
    .HasOptional(b => b.Blog)
    .WithOptionalDependent(p => p.Post);

但是这不会在数据库中创建所需的外键。 我发现流畅的API中的命名概念非常混乱,我尝试了很多变种并搜索SO以寻找类似的问题,但到目前为止还没有运气。 我想要正确的FK,EF导航属性。任何一个实体都可以是校长。

任何人都可以提出一些建议吗?

1 个答案:

答案 0 :(得分:0)


 modelBuilder.Entity<Blog>().HasOptional(b => b.Post).WithRequired(p => p.Blog);

我过去曾经用过这个。这是说博客可以有一个空帖子。但帖子必须引用博客。