【问题标题】:Does isRequired() conflict with onDelete(DeleteBehavior.setNull)?isRequired() 是否与 onDelete(DeleteBehavior.setNull) 冲突?
【发布时间】:2021-02-23 01:30:39
【问题描述】:

我正在创建代码优先实体框架,当我使用 fluent API 来管理映射时,我有以下代码


     modelBuilder.Entity<Room>()
                        .HasOne(r => r.Creator)
                        .WithMany(u => u.Rooms)
                        .HasForeignKey(p => p.CreatorId)
                        .IsRequired()
                        .OnDelete(DeleteBehavior.SetNull);




所以我的问题是这个链接方法中是否存在任何冲突,因为 IsRequired() 用于使外键不允许为空,并且“.OnDelete(DeleteBehavior.SetNull);”当u(指用户)实体被删除时将外键设置为null,那么当与这个房间关联的用户被删除时,这个链接方法的行为是什么,是否会执行操作并设置外键为null或者操作会被限制?

【问题讨论】:

    标签: c# entity-framework asp.net-core entity-framework-core


    【解决方案1】:

    是的,它们会发生冲突。如果您使用DeleteBehavior.SetNull,您的CreatorId 将在迁移期间设置为可为空。但是,如果您将CreatorId 设置为必需,它们将发生冲突,您将无法成功迁移并成功创建关系。

    如果你需要CreatorId属性是必须的,那么建议你使用:

     modelBuilder.Entity<Room>()
                        .HasOne(r => r.Creator)
                        .WithMany(u => u.Rooms)
                        .HasForeignKey(p => p.CreatorId)
                        .IsRequired()
                        .OnDelete(DeleteBehavior.Cascade);
    

    否则,您可以使用:

     modelBuilder.Entity<Room>()
                     .HasOne(r => r.Creator)
                     .WithMany(u => u.Rooms)
                     .HasForeignKey(p => p.CreatorId)
                     .OnDelete(DeleteBehavior.SetNull);
    

    更多详情可以看这篇文章:The Fluent API OnDelete Method。

    【讨论】:

    • 谢谢,感谢您尝试解释这一点
    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多