Команда обновления базы данных не выполняется из-за проблемы каскадирования (циклической зависимости) между двумя таблицC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Команда обновления базы данных не выполняется из-за проблемы каскадирования (циклической зависимости) между двумя таблиц

Сообщение Anonymous »

Я работаю над проектом, и у меня есть две таблицы: Пользователи и Запросы.
Сценарий: пользователь может отправлять несколько запросов другим пользователям, и другие пользователи смогут ответить на этот конкретный запрос.
Я хочу, чтобы для завершения одного цикла запроса в таблице запросов внутри таблицы создавалась только одна запись. базу данных.
Рассмотрев это, я создал Пользователей и классы модели Requests, например:

Код: Выделить всё

public class User
{
[Key]
public Guid UserID { get; set; }

public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;

public ICollection FamilyId { get; set; } = new List();
public ICollection Roles { get; set; } = new List();
public ICollection SentRequests { get; set; } = new List();
public ICollection ReceivedRequests { get; set; } = new List();
}

public class Request
{
[Key]
public Guid RequestId { get; set; }

[Required]
public Guid SenderId { get; set; }
public User Sender { get; set; }

// Foreign key for the user receiving the request
[Required]
public Guid ReceiverId { get; set; }
public User Receiver { get; set; }

[Required]
public string Message { get; set; } = "Please add into my family.";

[Required]
public string Status { get; set; } = "Pending"; // Pending, Approved, or Rejected

// Method to update the request status
public void UpdateStatus(string newStatus)
{
Status = newStatus;
UpdatedAt = DateTime.UtcNow;
}
}

Код: Выделить всё

MyAppDBContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Configure relationships, keys, etc.\
modelBuilder.Entity()
.HasOne(r => r.Sender)
.WithMany(u => u.SentRequests)
.HasForeignKey(r => r.SenderId)
.OnDelete(DeleteBehavior.Restrict);

modelBuilder.Entity()
.HasOne(r => r.Receiver)
.WithMany(u => u.ReceivedRequests)
.HasForeignKey(r =>  r.ReceiverId)
.OnDelete(DeleteBehavior.Restrict);

base.OnModelCreating(modelBuilder);
}
Здесь показаны мои методы миграции Up и Down:

Код: Выделить всё

protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Requests_Users_ReceiverId",
table: "Requests");

migrationBuilder.DropForeignKey(
name: "FK_Requests_Users_SenderId",
table: "Requests");

migrationBuilder.AddForeignKey(
name: "FK_Requests_Users_ReceiverId",
table: "Requests",
column: "ReceiverId",
principalTable: "Users",
principalColumn: "UserID");

migrationBuilder.AddForeignKey(
name: "FK_Requests_Users_SenderId",
table: "Requests",
column: "SenderId",
principalTable: "Users",
principalColumn: "UserID");
}

/// 
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Requests_Users_ReceiverId",
table: "Requests");

migrationBuilder.DropForeignKey(
name: "FK_Requests_Users_SenderId",
table: "Requests");

migrationBuilder.AddForeignKey(
name: "FK_Requests_Users_ReceiverId",
table: "Requests",
column: "ReceiverId",
principalTable: "Users",
principalColumn: "UserID",
onDelete: ReferentialAction.Restrict);

migrationBuilder.AddForeignKey(
name: "FK_Requests_Users_SenderId",
table: "Requests",
column: "SenderId",
principalTable: "Users",
principalColumn: "UserID",
onDelete: ReferentialAction.Restrict);
}
В консоли диспетчера пакетов появляется следующая ошибка:

Не удалось выполнить DbCommand (11 мс) [Параметры =[], CommandType='Text', CommandTimeout='30']

Код: Выделить всё

CREATE TABLE [Requests]
(
[RequestId] uniqueidentifier NOT NULL,
[SenderId] uniqueidentifier NOT NULL,
[ReceiverId] uniqueidentifier NOT NULL,
[Message] nvarchar(max) NOT NULL,
[Status] nvarchar(max) NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,

CONSTRAINT [PK_Requests] PRIMARY KEY ([RequestId]),
CONSTRAINT [FK_Requests_Users_ReceiverId]
FOREIGN KEY ([ReceiverId]) REFERENCES [Users] ([UserID])
ON DELETE CASCADE,
CONSTRAINT [FK_Requests_Users_SenderId]
FOREIGN KEY ([SenderId]) REFERENCES [Users] ([UserID])
ON DELETE CASCADE
);
Microsoft.Data.SqlClient.SqlException (0x80131904): введение ограничения FOREIGN KEY «FK_Requests_Users_SenderId» в таблице «Запросы» может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.


Номер ошибки: 1785, State :0,Class:16
Введение ограничения FOREIGN KEY **'FK_Requests_Users_SenderId' в таблице 'Requests' может привести к циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Не удалось создать ограничение или индекс. См. предыдущие ошибки.


Подробнее здесь: https://stackoverflow.com/questions/793 ... dependency
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сохранить двунаправленную ассоциацию без каскадирования с использованием данных Spring JPA?
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить двунаправленную ассоциацию без каскадирования с использованием данных Spring JPA?
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Параметры каскадирования Blazor в .net8
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как избежать циклической зависимости, когда две строки ссылаются друг на друга в Entity Framework
    Anonymous » » в форуме C#
    0 Ответы
    85 Просмотры
    Последнее сообщение Anonymous
  • Как избежать циклической зависимости на игровом сервере?
    Anonymous » » в форуме C#
    0 Ответы
    69 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»