多重性与角色中的引用约束冲突

duk*_*uke 3 asp.net-mvc entity-framework one-to-many ef-code-first

我收到的错误消息如下 ----- MVCRegistration.Models.Post_UserProfile: : 多重性与关系“Post_UserProfile”中角色“Post_UserProfile_Target”中的引用约束冲突。由于从属角色中的所有属性均不可为空,因此主体角色的重数必须为“1”。MVCRegistration.Models.PostComment_UserProfile::多重性与关系“PostComment_UserProfile”中角色“PostComment_UserProfile_Target”中的引用约束冲突。由于从属角色中的所有属性均不可为空,因此主体角色的重数必须为“1”。 这里,MVCRegistraion 是解决方案文件名。

现在,我有这样的三堂课——

 public class UserProfile
{
    public UserProfile()
    {
        this.PostComments = new HashSet<PostComment>();
        this.Posts = new HashSet<Post>();
    }
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string AvatarExt { get; set; }
    public virtual ICollection<PostComment> PostComments { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

后期课程是这样的----

    public class Post
    {
    public Post()
    {
        this.PostComments = new HashSet<PostComment>();
    }
    [Key]
    public int PostId { get; set; }
    public string Message { get; set; }
    public int PostedBy { get; set; }
    public System.DateTime PostedDate { get; set; }
    public virtual ICollection<PostComment> PostComments { get; set; }
    public virtual UserProfile UserProfile { get; set; }
  }
Run Code Online (Sandbox Code Playgroud)

评论后是----

   public class PostComment
{
    [Key]
    public int CommentId { get; set; }
    public int PostId { get; set; }
    public string Message { get; set; }
    public int CommentedBy { get; set; }
    public System.DateTime CommentedDate { get; set; }
    public virtual Post Post { get; set; }
    public virtual UserProfile UserProfile { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用 Fluent api 配置了 UserProfile 类和 Post 类之间的一对多关系 ---

        modelBuilder.Entity<Post>()
                   .HasOptional<UserProfile>(u => u.UserProfile)
                   .WithMany(p => p.Posts)
                   .HasForeignKey(s => s.PostedBy);
Run Code Online (Sandbox Code Playgroud)

USerProfile 和 Post comment 类之间的一对多关系如下 -----

    modelBuilder.Entity<PostComment>()
                  .HasOptional<UserProfile>(u => u.UserProfile)
                  .WithMany(p => p.PostComments)
                  .HasForeignKey(s => s.CommentedBy);
Run Code Online (Sandbox Code Playgroud)

现在,我很沮丧地弄清楚这里发生了什么。首先查看代码以创建名为 PostedBy 的外键非常简单,但实体框架使事情变得更糟。不知道实体框架现在需要什么。

小智 5

正如声明所说,在一对多端,即在从属端,您的属性不可为空,并且在您的流畅 API 中,您试图使外键可为空。

只需将 Post 类中的外键从不可为空更改为可空,如下所示 -

 public int? PostedBy {get; set;}
Run Code Online (Sandbox Code Playgroud)

在你的评论课上你必须再次这样做——

  pulic int? CommentedBy {get; set;}
Run Code Online (Sandbox Code Playgroud)