c# - 实体模型之间的关系问题
问题描述
我想在我的项目中创建一个喜欢和不喜欢的系统,我有一个用户模型,一个帖子模型,一个评论模型,关系如下:
用户 1 ---> * 发布
用户 1 ---> * 评论
发布 1 ---> * 评论
现在我想添加一个名为 Like 的新模型,其关系如下:
发布 1 ---> * 喜欢用户 1 ---> * 喜欢
但是当我想更新数据库时,我收到一条错误消息:“可能导致循环或多个级联路径”我发现如果我删除我的一个属性它会修复错误,例如:
public class Post
{
public Post()
{
}
[Key]
public int Id { get; set; }
public string Title { get; set; }
public virtual List<Like> Likes { get; set; }
public virtual List<Comment> Comments { get; set; }
}
public class Like
{
public Like()
{
}
[Key]
public int Id { get; set; }
public bool IsLike { get; set; }
public int postId { get; set; } // I remove these properties
public virtual Post post { get; set; }
public int commentId { get; set; } // I remove these properties
public virtual Comment comment { get; set; }
}
为了修复“多级联”错误,我删除了“PostId”和“commentId”属性。
但是当我将实体(新数据)添加到数据库中的表(喜欢)时,我不知道我的帖子是如何重复的,我的意思是重复的帖子被添加到表中。
任何机构都可以告诉我这个问题吗?
解决方案
为了更好的设计,将您的like表分开Post
如下Comment
:
public class User
{
[Key]
public int Id { get; set; }
//......
public virtual List<Post> Posts { get; set; }
public virtual List<Comment> Comments { get; set; }
public virtual List<PostLikes> PostLikes { get; set; }
public virtual List<CommentLIkes> CommentLikes { get; set; }
}
public class Post
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public virtual List<PostLike> PostLikes { get; set; }
public virtual List<Comment> Comments { get; set; }
}
public class Comment
{
[Key]
public int Id { get; set; }
public string CommentBody { get; set; }
//.....
public virtual List<CommentLike> CommentLikes { get; set; }
}
public class PostLike
{
[Key]
public int Id { get; set; }
public int PostId { get; set; }
public int UserId {get; set;}
public bool IsLike { get; set; }
public virtual Post post { get; set; }
public virtual User User { get; set; }
}
public class CommentLike
{
[Key]
public int Id { get; set; }
public int CommentId { get; set; }
public int UserId {get; set;}
public bool IsLike { get; set; }
public virtual Comment Comment { get; set; }
public virtual User User { get; set; }
}
现在生成一个全新的迁移并相应地更新数据库。
注意:您可能会在迁移更新时遇到级联删除问题。如果您面对,请告诉我,我将使用 Fluent API 配置更新答案。
推荐阅读
- angular - 错误无法找到导入 fontawesome scss 文件的 Angular 8 的“变量”
- vaticle-typedb - 如何在不使用客户端 API 的情况下从 Grakn 导出边缘列表
- python - Pygame gfxdraw 模块更改线宽
- c - 确定文本文件 C 中的数字或字符
- reactjs - 设置 PROPS 类型的正确方法是什么?
- python - 在 matplotlib 的 hexbin 图中应用插值的过程是什么?
- testing - 使用 Mockito 提供 @InjectMoks 对象的所有依赖项,而 @Mock 无法提供
- python - 在两个数据集之间使用 KDTree 查找最近的邻居
- c - 从 C 中的名称文件中读取字符串时出现问题
- ionic-framework - 如何在 Ionic 5 中使用 cordova-plugin-admob-free