更新联合表时,父记录被删除

时间:2019-04-07 14:58:23

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

我们正在使用.NET Core和带有Code First的EF Core开发应用程序,因此我们正在使用Migrations创建和扩展数据库。 该应用程序将用于设置约定。因此,有演讲者,会议和不同主题。 我有两个实体。 WishlistSpeaker和Track,它们形成多对多关系。使用Fluent API,我使用两个表中的ID创建了一个联接表。现在,当我创建带有曲目列表的wishlistSpeaker时,它会整齐地存储在WishlistspeakerTrack连接表中。当我尝试更新该WishlistSpeaker并添加或删除曲目时,扬声器和WishlistSpeakerTracks均被删除。我在调试中没有看到任何错误。

我尝试在迁移中更改onDelete和OnUpdate操作,然后重新应用它们。看到我的代码中没有错误,我认为它与数据库有关,所以我花了大部分时间在数据库中搜索。

WishlistSpeaker实体

    public class WishlistSpeaker
    {
        [Key]
        public int WishlistSpeakerId { get; set; }

        public string FirstName { get; set; }

        public string Name { get; set; }

        public int EventID { get; set; }

        public string Company { get; set; }

        public string Mail { get; set; }

        public string Country { get; set; }

        public string Twitter { get; set; }

        public List<WishlistSpeakerTrack> WishlistSpeakerTracks { get; set; }

        public int StatusId { get; set; }

        public Status Status { get; set; }

        public string LinkedIn { get; set; }
    }

Track实体

    public class Track
    {
        [Key]
        public int TrackId { get; set; }

        [Required]
        public string TrackName { get; set; }

        public int EventId { get; set; }

        public Event Event { get; set; }

        public List<WishlistSpeakerTrack> WishlistSpeakerTracks { get; set; }
    }

这是为JoinTable创建的实体

    public class WishlistSpeakerTrack
    {
        [Key]
        public int TrackId { get; set; }

        public Track Track { get; set; }

        [Key]
        public int WishlistSpeakerId { get; set; }

        public WishlistSpeaker WishlistSpeaker { get; set; }
    }

这是在迁移中创建的内容。现在将OnDelete设置为NoAction,但以前它是Restrict

 migrationBuilder.CreateTable(
                name: "WishlistSpeakerTrack",
                columns: table => new
                {
                    TrackId = table.Column<int>(nullable: false),
                    WishlistSpeakerId = table.Column<int>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_WishlistSpeakerTrack", x => new { x.TrackId, x.WishlistSpeakerId });
                    table.ForeignKey(
                        name: "FK_WishlistSpeakerTrack_Track_TrackId",
                        column: x => x.TrackId,
                        principalTable: "Track",
                        principalColumn: "TrackId",
                        onDelete: ReferentialAction.NoAction);
                    table.ForeignKey(
                        name: "FK_WishlistSpeakerTrack_WishlistSpeakers_WishlistSpeakerId",
                        column: x => x.WishlistSpeakerId,
                        principalTable: "WishlistSpeakers",
                        principalColumn: "WishlistSpeakerId",
                        onDelete: ReferentialAction.NoAction);
                });

我不会在不删除WishlistSpeaker和JoinTable的情况下进行更新。

1 个答案:

答案 0 :(得分:0)

我都做了,但都没有。 我想我找到了问题。在我的ContextModelSnapshot中,它仍然设置为input type file 我该如何更改?

onDelete: ReferentialAction.Cascade