多重性与角色中的参照约束冲突
multiplicity conflicts with referential constraint in Role
我收到的错误消息如下 -----
MVCRegistration.Models.Post_UserProfile: : 多重性与关系 'Post_UserProfile' 中角色 'Post_UserProfile_Target' 中的引用约束冲突。由于 Dependent Role 中的所有属性都不可为 null,因此 Principal Role 的多重性必须为“1”。
MVCRegistration.Models.PostComment_UserProfile::多重性与关系 'PostComment_UserProfile' 中角色 'PostComment_UserProfile_Target' 中的引用约束冲突。因为 Dependent Role 中的所有属性都不可为 null,所以 Principal Role 的多重性必须为“1”。
这里,MVCRegistraion 是解决方案文件名。
现在,我有三个这样的class---
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; }
}
而post class是这样的----
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; }
}
和Post评论是----
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; }
}
我已经使用流利的 api---
配置了 USerProfile class 和 Post class 之间的一对多关系
modelBuilder.Entity<Post>()
.HasOptional<UserProfile>(u => u.UserProfile)
.WithMany(p => p.Posts)
.HasForeignKey(s => s.PostedBy);
USerProfile 和 Post 之间的一对多关系评论 class 像这样-----
modelBuilder.Entity<PostComment>()
.HasOptional<UserProfile>(u => u.UserProfile)
.WithMany(p => p.PostComments)
.HasForeignKey(s => s.CommentedBy);
现在,我很沮丧地弄清楚这里发生了什么。首先查看代码以创建名称为 PostedBy 的外键非常简单,但是 entity framework 正在让事情 worse.Dont 知道 entity framework 现在需要什么。
因为 Dependent Role 中的所有属性都不可为 null,所以 Principal Role 的多重性必须为“1”
但是:
modelBuilder.Entity<PostComment>()
.HasOptional<UserProfile>(u => u.UserProfile)
.WithMany(p => p.PostComments)
.HasForeignKey(s => s.CommentedBy);
因为 CommentedBy 不可为空,这意味着 Post 评论必须有一个 UserProfile。您有两种选择来解决此问题:
public 内部? CommentedBy { 得到;放; }
或
HasRequired(u => u.UserProfile).
它必须匹配。
正如声明所说,在一对多端,即在从属端,你有 属性 不可为 null 并且在你的流利 api 中,你试图使你的外键可以为空.
只需将 Post class 中的外键从不可为空更改为可空,如下所示--
public int? PostedBy {get; set;}
在您的评论中 class 您必须再次这样做----
pulic int? CommentedBy {get; set;}
我收到的错误消息如下 ----- MVCRegistration.Models.Post_UserProfile: : 多重性与关系 'Post_UserProfile' 中角色 'Post_UserProfile_Target' 中的引用约束冲突。由于 Dependent Role 中的所有属性都不可为 null,因此 Principal Role 的多重性必须为“1”。 MVCRegistration.Models.PostComment_UserProfile::多重性与关系 'PostComment_UserProfile' 中角色 'PostComment_UserProfile_Target' 中的引用约束冲突。因为 Dependent Role 中的所有属性都不可为 null,所以 Principal Role 的多重性必须为“1”。 这里,MVCRegistraion 是解决方案文件名。
现在,我有三个这样的class---
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; }
}
而post class是这样的----
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; }
}
和Post评论是----
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; }
}
我已经使用流利的 api---
配置了 USerProfile class 和 Post class 之间的一对多关系 modelBuilder.Entity<Post>()
.HasOptional<UserProfile>(u => u.UserProfile)
.WithMany(p => p.Posts)
.HasForeignKey(s => s.PostedBy);
USerProfile 和 Post 之间的一对多关系评论 class 像这样-----
modelBuilder.Entity<PostComment>()
.HasOptional<UserProfile>(u => u.UserProfile)
.WithMany(p => p.PostComments)
.HasForeignKey(s => s.CommentedBy);
现在,我很沮丧地弄清楚这里发生了什么。首先查看代码以创建名称为 PostedBy 的外键非常简单,但是 entity framework 正在让事情 worse.Dont 知道 entity framework 现在需要什么。
因为 Dependent Role 中的所有属性都不可为 null,所以 Principal Role 的多重性必须为“1”
但是:
modelBuilder.Entity<PostComment>()
.HasOptional<UserProfile>(u => u.UserProfile)
.WithMany(p => p.PostComments)
.HasForeignKey(s => s.CommentedBy);
因为 CommentedBy 不可为空,这意味着 Post 评论必须有一个 UserProfile。您有两种选择来解决此问题:
public 内部? CommentedBy { 得到;放; }
或
HasRequired(u => u.UserProfile).
它必须匹配。
正如声明所说,在一对多端,即在从属端,你有 属性 不可为 null 并且在你的流利 api 中,你试图使你的外键可以为空.
只需将 Post class 中的外键从不可为空更改为可空,如下所示--
public int? PostedBy {get; set;}
在您的评论中 class 您必须再次这样做----
pulic int? CommentedBy {get; set;}