2015-10-25 2 views
1

сообщения об ошибке, которое я получаю следующее ----- MVCRegistration.Models.Post_UserProfile:: Кратность конфликтует с ограничением ссылочного в ролях «Post_UserProfile_Target» в отношениях «Post_UserProfile». Поскольку все свойства в зависимой роли не имеют значения NULL, множественность главной роли должна быть «1». MVCRegistration.Models.PostComment_UserProfile:: Множественность конфликтует с реляционным ограничением в роли «PostComment_UserProfile_Target» в отношении «PostComment_UserProfile». Поскольку все свойства в зависимой роли не имеют значения NULL, множественность главной роли должна быть «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; } 
} 

и пост класс что-то вроде этого ----

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; } 
    } 

и PostComment является ----

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; } 
} 

Я установил отношения между многими между классами USerProfile и классом Post, как это, используя беглый api ---

 modelBuilder.Entity<Post>() 
        .HasOptional<UserProfile>(u => u.UserProfile) 
        .WithMany(p => p.Posts) 
        .HasForeignKey(s => s.PostedBy); 

и один ко многим отношений между USERPROFILE и оставить комментарий класса, как этот -----

modelBuilder.Entity<PostComment>() 
        .HasOptional<UserProfile>(u => u.UserProfile) 
        .WithMany(p => p.PostComments) 
        .HasForeignKey(s => s.CommentedBy); 

Теперь я frustated выяснить, что происходит здесь. Это так просто, глядя в код сначала, чтобы создать внешний ключ с именем EditBy, но структура сущности делает вещи хуже. Не знаю, какая инфраструктура сущности требуется сейчас.

ответ

2

Как сказано в заявлении, в конце каждого конца, то есть в зависимом конце, у вас есть свойство, не имеющее значения NULL, и в вашем текущем api вы пытаетесь сделать свой внешний ключ допустимым.

Просто измените свой внешний ключ класса Поста от ненулевого до NULLABLE как this--

public int? PostedBy {get; set;} 

и в своем классе Комментария снова у вас, чтобы сделать это, как это ----

pulic int? CommentedBy {get; set;} 
+0

Итак, что делать, если вы получаете эту ошибку из nullable Guid ('Guid?'). Что-нибудь еще, чтобы проверить, что происходит? – mmcrae

1

Поскольку все свойства в зависимой роли не являются обнуляемыми, кратностью основной роли должна быть «1»

Однако:

modelBuilder.Entity<PostComment>() 
       .HasOptional<UserProfile>(u => u.UserProfile) 
       .WithMany(p => p.PostComments) 
       .HasForeignKey(s => s.CommentedBy); 

так CommentedBy не обнуляемые, это означает, что Комментарий к сообщению ДОЛЖЕН ИМЕТЬ UserProfile. У вас есть два варианта исправить это:

public int? CommentedBy {get; задавать; }

или

HasRequired (и => u.UserProfile).

Он просто должен соответствовать.