gpt4 book ai didi

entity-framework - EF Core 2.1 值转换更新问题

转载 作者:行者123 更新时间:2023-12-05 06:30:38 25 4
gpt4 key购买 nike

我在使用值转换时遇到问题,这是 EF Core 2.1 中的新功能,用于列表到字符串的转换。

因为我不需要能够过滤数据库中的枚举值列表,所以我决定将我的枚举值列表映射到一个以逗号分隔的字符串和 int 值。

转换应该如下所示:

From: List<EnumType>{EnumType.Value1, EnumType.Value2}    
To: 1,2

一切似乎都运行良好,但 EF 似乎没有注意到枚举值列表已更改,并且未在数据库中发布更新。是否存在不允许列表值转换的限制?

值转换代码如下所示:

private const char ENUM_LIST_DELIMITER = ',';
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Entity>().Property(x => x.Types)
.HasConversion(x => ConvertToString(x), x => ConvertToEnumList<EnumType>(x));
}

private static List<TEnum> ConvertToEnumList<TEnum>(string value) where TEnum : struct, IConvertible
{
return value?.Split(ENUM_LIST_DELIMITER)
.Select(Enum.Parse<TEnum>)
.ToList();
}

private static string ConvertToString<TEnum>(IEnumerable<TEnum> value) where TEnum : struct, IConvertible
{
return string.Join(ENUM_LIST_DELIMITER, value.Select(x => Convert.ToInt32(x)));
}
}

最佳答案

List<T> 上的值转换使用 DbContext.Set<T>.Update(entity) 时为我工作而不是从上下文中获取实体,更改一些属性然后调用 .SaveChangesAsync() .这可能是由于@Ivan Stoev 所说的关于平等比较的内容。 Update()将实体中的所有属性标记为已更改。也许并非在所有情况下都需要,但可以快速解决。

关于entity-framework - EF Core 2.1 值转换更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52184593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com