Мы разрабатываем приложения с .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 без того, чтобы оба были удалены.