【发布时间】:2022-02-02 15:06:05
【问题描述】:
我有以下 efcore + cosmosdb 提供者配置 + 类:
public class FooConfiguration : IEntityTypeConfiguration<Foo>
{
public void Configure(EntityTypeBuilder<Foo> builder)
{
builder
.ToContainer("Foos")
.HasPartitionKey(f => f.PartitionKey);
builder
.OwnsMany(f => f.EnumValues);
}
}
public class Foo
{
public string Id { get; set; }
public string PartitionKey { get; set; }
public ICollection<EnumValue> EnumValues { get; set; }
}
public enum EnumValue
{
Enum1, Enum2
}
不幸的是,.OwnsMany() 的 TRelatedEntity 具有 class 约束,这意味着它不接受枚举值。
我得到的错误如下:
类型“EnumValue”必须是引用类型才能将其用作泛型类型或方法“EntityTypeBuilder.OwnsMany(Expression
>)”中的参数“TRelatedEntity”
我希望集合中的数据看起来像(同时保持枚举约束):
{
...
"EnumValues": [0]
...
},
{
...
"EnumValues": [0,1]
...
}
有没有办法使用拥有的枚举集合?
PS。如果我完全删除 .OwnsMany,我会在运行时收到以下异常:
System.InvalidOperationException:无法映射属性“Foo.EnumValues”,因为它属于“ICollection”类型,它不是受支持的原始类型或有效的实体类型。显式映射此属性,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略它。
【问题讨论】:
-
您找到解决问题的方法了吗?
标签: c# entity-framework entity-framework-core azure-cosmosdb