我想配置以下关系:
我尝试了很多组合,但没有成功,请帮助我。
我目前的代码:
public class Comment
{
public int Id { get; set; }
public string Text { get; set; }
public Like ToLike { get; set; }
public int? ToLikeId { get; set; }
public ICollection<Like> Likes { get; set; }
}
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Like> CreatedLikes { get; set; }
public ICollection<Like> Likes { get; set; }
}
public class Like
{
public int Id { get; set; }
public User Author { get; set; }
public int AuthorId { get; set; }
public DateTime CreatedAt { get; set; }
public Comment Reason { get; set; }
public Comment Comment { get; set; }
public int? CommentId { get; set; }
public User User { get; set; }
public int? UserId { get; set; }
}
modelBuilder.Entity<Like>(b =>
{
b.HasAlternateKey(l => new { l.AuthorId, l.CommentId, l.UserId });
b.HasOne(l => l.Reason)
.WithOne(c => c.ToLike)
.HasForeignKey<Comment>(c => c.ToLikeId)
.OnDelete(DeleteBehavior.SetNull);
b.HasOne(l => l.Author).WithMany(a => a.CreatedLikes)
.OnDelete(DeleteBehavior.Restrict);
b.HasOne(l => l.User).WithMany(u => u.Likes);
b.HasOne(l => l.Comment)
.WithMany(c => c.Likes)
.HasForeignKey(c => c.CommentId);
});
目前我在第一次数据库初始化时遇到此错误(行context.Database.Migrate();):
System.Data.SqlClient.SqlException:&#39;介绍FOREIGN KEY 约束&#39; FK_Likes_Comments_CommentId&#39;在桌子上&#39;喜欢&#39;可能会导致 循环或多个级联路径。指定ON DELETE NO ACTION或ON 更新NO ACTION,或修改其他FOREIGN KEY约束。
主要问题:如何修复此错误?
其他问题:
答案 0 :(得分:1)
如果我正确理解了该问题,则在创建具有级联更新和删除的主键和外键关系时,您将遇到菱形图案。在具有级联关系的模式中,数据库发现级联不明确。
钻石中的一个关系必须具有外键的Restrict属性。
Microsoft Documentation on Entity Framework Core Relationships
级联删除
按照惯例,级联删除将设置为Cascade for required 关系和限制可选关系(参见 必需部分,用于必需和可选之间的差异 关系)。级联意味着也会删除依赖实体。 限制意味着未加载到内存中的从属实体 将保持不变,必须手动删除或更新为 指向有效的主体实体。对于加载到的实体 在内存中,EF将尝试将外键属性设置为null。