我有一个父对象,如下:
public class Event
{
public int Id { get; private set; }
public Interest? Interest { get; set; }
}
public class Interest
{
public int Id { get; private set; }
// no List<Event> Events { get; set; }
}
因此每个
Event
对象都有 0 或 1 个 Interest
对象。许多事件可以指向相同的兴趣。
当我删除兴趣对象时,我希望将数据库中该兴趣是删除兴趣的每个 Event.Interest 设置为 null。有没有办法在 EF 中声明这一点?
或者我需要读取所有这些Event对象,将它们的Interest设置为null,然后保存它们?
或者有没有办法通过实体框架传递一条 SQL 语句,将所有当前设置为要删除的 Interest.Id 的底层 Event.InterestId 设置为 null?
您可以在配置关系时设置级联选项 - 请参阅级联删除文档。类似于以下内容:
modelBuilder.Entity<Event>()
.HasOne<Interest>(e => e.Interest)
.WithOne()
.HasForeignKey<Interest>("EventId")
.OnDelete(DeleteBehavior.SetNull) // Or DeleteBehavior.ClientSetNull
.IsRequired(false);
我还建议公开导航属性:
public class Interest
{
public int Id { get; private set; }
public Event Event { get; set; }
}
另请阅读: