由于缺少枚举更改功能,我在 npgsql 中使用枚举到 int 的枚举数组转换。
模型:
public class TestEntity
{
public Guid Id { get; set; }
public TestEnum[] Enums { get; set; }
public TestEntity()
{
Enums = new TestEnum[0];
}
}
public enum TestEnum
{
NONE,
FIRST,
SECOND,
THIRD
}
语境:
public class TestContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TestEntity>()
.Property(x => x.Enums)
.HasConversion(
e => e.Cast<int>().ToArray(),
e => e.Cast<TestEnum>().ToArray());
}
}
当我在没有“接触”LINQ 表达式中的数组属性的情况下从/向 DB 读取或写入实体时,一切正常 - Postgres 中的列是 integer[] 类型,并且映射正常工作。
但是,当我在 enum[] 属性上使用“包含”函数时,它会抛出 InvalidCastException:“无法使用处理程序类型 Int32Handler 编写 CLR 类型 Proj.TestEnum”。
例子:
var param = TestEnum.FIRST;
var result = context.TestEntities!
.Where(x => x.Enums.Contains(param))
.ToArray();
有什么我想念的吗?