Сценарий: пользователь может отправлять несколько запросов другим пользователям, и другие пользователи смогут ответить на этот конкретный запрос.
Я хочу, чтобы для завершения одного цикла запроса в таблице запросов внутри таблицы создавалась только одна запись. базу данных.
Рассмотрев это, я создал Пользователей и классы модели 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);
}
Код: Выделить всё
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
);
Номер ошибки: 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