【问题标题】:Is there a way to map complex type to the string?有没有办法将复杂类型映射到字符串?
【发布时间】:2019-09-18 09:58:08
【问题描述】:

有没有办法将复杂类型映射到字符串?

我正在做如下自定义映射:

foreach (var pb in modelBuilder.Model
            .GetEntityTypes()
            .SelectMany(t => t.GetProperties())
            .Where(p => p.ClrType == typeof(SomeComplexType) && !Attribute.IsDefined(p.GetMemberInfo(false, false), typeof(Padding)))
            .Select(p => modelBuilder.Entity(p.DeclaringEntityType.ClrType).Property(p.Name)))
        {
            pb.HasConversion(new ValueConverter<SomeComplexType, string>(
                v => v.ToString(),
                v => SomeComplexType.Parse(v)));
        }

但是在运行迁移时我得到了

无法映射属性“SomeEntity.ComplexTypeProperty”,因为它属于“SomeComplexType”类型,它不是受支持的原始类型或有效的实体类型。显式映射此属性,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略它。

所以我希望能够将复杂类型映射到字符串并按原样保存。

【问题讨论】:

标签: c# asp.net-core entity-framework-core


【解决方案1】:

最好的办法是对其进行 JSON 编码:

pb.HasConversion(new ValueConverter<SomeComplexType, string>(
    v => JsonConvert.SerializeObject(v),
    v => JsonConvert.DeserializeObject<SomeComplexType>(v)));

在 ASP.NET Core 3.0 中,您将改用 System.Text.Json,因此方法将是 JsonSerializer.ToString(v)JsonSerializer.Parse&lt;SomeComplexType&gt;(v)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多