Использование hasfilter на столбце с ValueConverterC#

Место общения программистов C#
Ответить
Anonymous
 Использование hasfilter на столбце с ValueConverter

Сообщение Anonymous »

У меня есть этот столбец и enum: < /p>
public class MagicLinkToken : BaseEntity
{
public required string EmailAddress { get; set; }
public required string TokenHash { get; set; }
public required string IpAddress { get; set; }
public MagicLinkTokenStatus Status { get; set; } = MagicLinkTokenStatus.Active;
public required DateTime ExpiresAt { get; set; }

// signup
public string? FirstName { get; set; }
public string? LastName { get; set; }
}

public enum MagicLinkTokenStatus
{
Active, // Token is valid and ready to be used
Used, // Token has been successfully used for login/signup
Expired, // Token expired before being used
Revoked, // Token was manually invalidated (e.g., user requested a new link)
}

Я хочу добавить уникальное ограничение на tokenhash , но только тогда, когда статус является «активным». В базе данных данные в статусе сохраняются как строковое представление enum. Итак, я добавил это в свой контекст DB: < /p>
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity().Property(e => e.Status).HasConversion();
builder.Entity().HasIndex(t => t.TokenHash).IsUnique().HasFilter("\"Status\" = 'Active'");

}

Я написал тест для проверки этого фильтра, создав две сущности MagicLinkToken с одинаковым TokenHash и Status установить для «Active». Не было никакого исключения. Разве невозможно использовать HASFILTER в столбце с использованием преобразователя значений? Вот сгенерированная миграция: < /p>
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace FindSportsApi.Data.Migrations
{
///
public partial class MagicLinkTokenUniqueConstraint : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateIndex(
name: "IX_MagicLinkTokens_TokenHash",
table: "MagicLinkTokens",
column: "TokenHash",
unique: true,
filter: "\"Status\" = 'Active'"
);
}

///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(name: "IX_MagicLinkTokens_TokenHash", table: "MagicLinkTokens");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... econverter
Ответить

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

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

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

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

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