我很难在EF代码中首先获得这个概念。基本上它是2个表,彼此有外键。这两种关系应该是一对一或零。即都是可选的。
这是我的尝试:
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导航属性。任何一个实体都可以是校长。
任何人都可以提出一些建议吗?
答案 0 :(得分:0)
modelBuilder.Entity<Blog>().HasOptional(b => b.Post).WithRequired(p => p.Blog);
我过去曾经用过这个。这是说博客可以有一个空帖子。但帖子必须引用博客。