при обновлении объединенной таблицы родительская запись удаляется

2

Мы разрабатываем приложения с .NET Core и EF Core с Code First, поэтому мы используем миграции для создания и расширения базы данных. Приложение будет использоваться для настройки соглашений. Так и с докладчиками, сессиями и разными предметами. У меня есть две сущности. WishlistSpeaker и Track, и они образуют отношения "многие ко многим". С помощью Fluent API я создал таблицу соединений с идентификатором из обеих таблиц. Теперь, когда я создаю wishlistSpeaker со списком треков, он аккуратно сохраняется в таблице соединений WishlistspeakerTrack. Когда я пытаюсь обновить этот WishlistSpeaker и добавить или удалить трек, динамик и WishlistSpeakerTracks удаляются. Я не вижу ошибок в моей отладке.

Я попытался изменить действия onDelete и OnUpdate в процессе миграции, а затем повторно применить их. Поскольку я не вижу ошибок в своем коде, я думаю, что это как-то связано с БД, поэтому я провел большую часть своего времени в поисках.

The WishlistSpeaker Entity

    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; }
    }

Трек сущность

    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 без того, чтобы оба были удалены.

  • 0
    В поведение, которое вы объясняете, трудно поверить. Даже с onDelete: ReferentialAction.Cascade который является значением по умолчанию для этого типа отношений, каскадное удаление работает по-другому - от первичных таблиц до объединяемой таблицы. Требуется минимальный воспроизводимый пример .
  • 0
    Когда я обновляю пользователя, люблю менять его имя. Динамик не удаляется, это только когда я добавляю или удаляю треки
Показать ещё 2 комментария
Теги:
entity-framework
entity-framework-core

1 ответ

0

Я сделал и то, и другое не работает. Я думаю, что нашел свою проблему. В моем ContextModelSnapshot все еще установлено значение onDelete: ReferentialAction.Cascade Как мне это изменить?

modelBuilder.Entity("Oganize.Api.Core.Entities.WishlistSpeakerTrack", b =>
                {
                    b.HasOne("Oganize.Api.Core.Entities.Track", "Track")
                        .WithMany("WishlistSpeakerTracks")
                        .HasForeignKey("TrackId")
                        .OnDelete(DeleteBehavior.Cascade);

                    b.HasOne("Oganize.Api.Core.Entities.WishlistSpeaker", "WishlistSpeaker")
                        .WithMany("WishlistSpeakerTracks")
                        .HasForeignKey("WishlistSpeakerId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
  • 0
    изменил это, и это не сработало

Ещё вопросы

Сообщество Overcoder
Наверх
Меню