Код: Выделить всё
class Model
{
public Status Status { get; private set; }
}
< /code>
my enum: < /p>
enum Status
{
[Code("Active")]
Active = 1,
[Code("Pending")]
Pending = 2,
[Code("InProgress")]
InProgress = 3,
[Code("Complete")]
Complete = 4
}
< /code>
my поиск: < /p>
class StatusLookup
{
public required int Id { get; init; }
public required string Code { get; init; }
}
< /code>
Таблица поиска EF Конфигурация основной конфигурации: < /p>
public void Configure(EntityTypeBuilder builder)
{
builder
.ToTable($"Lookup_Status");
builder
.HasKey(t => t.Id);
builder
.Property(t => t.Code)
.HasMaxLength(64)
.IsRequired();
// Seed the lookup table
builder
.HasData(
BuildLookupLists() // Uses reflection to build lookup list data
);
}
< /code>
Конфигурация модели: < /p>
protected override void ConfigureEntity(EntityTypeBuilder builder)
{
builder
.Property(t => t.Status)
.HasConversion(
s => s.GetCode(),
c => EnumFromCode(c))
.IsRequired();
// I know this doesn't work, but should signify what I am trying to do
builder
.HasOne()
.WithMany()
// Ideally EF Core would know this is mapping to a string column in the database due
// to the previous definition saying that it has a string conversion, but this does not work.
.HasForeignKey(t => t.Status)
.HasPrincipalKey(t => t.Code)
.OnDelete(DeleteBehavior.Restrict);
}
- это то, что я пытаюсь сделать возможным? Ограничение на перечисление означает, что они знают все действительные значения и не могут ввести неверное значение перечисления.
Подробнее здесь: https://stackoverflow.com/questions/794 ... constraint