На основе документов EF Core (https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions), Я пытаюсь использовать новое преобразование значений EF Core для перечисления. Я хочу сохранить перечисление в виде строки в таблице базы данных SQL.
Вот сущность и перечисление.
public enum InputSetType
{
TypeA, TypeB
}
public class MonthlyInputSet
{
public int Id { get; set; }
public InputSetType Type { get; set; }
}
Здесь я настраиваю объект MonthlyInputSet:
public class MonthlyInputSetConfiguration : IEntityTypeConfiguration<MonthlyInputSet>
{
public void Configure(EntityTypeBuilder<MonthlyInputSet> builder)
{
builder.Property(mis => mis.Type).HasConversion(v => v.ToString(), v => (InputSetType)Enum.Parse(typeof(InputSetType), v));
}
}
Итак, я пытаюсь выполнить базовый запрос, чтобы получить эти данные иСбой. Запрос:
var saved = await _context.MonthlyInputSets.Include(mis => mis.InsertedBy)
.Include(mis => mis.UpdatedBy)
.Include(mis => mis.MonthlyInputs)
.ThenInclude(mi => mi.EmissionsUnit)
.FirstOrDefaultAsync(mis => mis.Id == id);
Но в первой строке этого запроса выдается сообщение об ошибке: «ArgumentException: необходимо указать действительную информацию для разбора в строке». Поэтому я предполагаю, чтоЯ неправильно настроил преобразование строки в таблице в перечисление в C #.
Полная трассировка необработанного стека:
![enter image description here](https://i.stack.imgur.com/4od0i.png)
Я проверил, что правильное строковое значение возвращается из базы данных. Оно не равно нулю и не является пустой строкой. Возвращенное строковое значение идеально соответствует члену перечисления.
public void Configure(EntityTypeBuilder<MonthlyInputSet> builder)
{
builder.Property(mis => mis.Type).HasConversion(
convertToProviderExpression: v => v.ToString(),
convertFromProviderExpression: v => Troubleshooting(v)
);
}
private InputSetType Troubleshooting(string v)
{
return (InputSetType)Enum.Parse(typeof(InputSetType), v);
}
эти дваизображения показывают, что тext в каждой строке в столбце типа базы данных идентична второму члену перечисления, сопоставленному с этим полем.
![enter image description here](https://i.stack.imgur.com/6V3Ar.png)