gpt4 book ai didi

c# - 在发送到数据库之前,使 EF 将可转换为字符串类型的属性转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:30 24 4
gpt4 key购买 nike

有没有一种方法可以告诉 EF 在将我的 MultilingualString 属性转换为字符串之前将它们发送到数据库(以及从数据库中获取时的另一种方式)?我想包装行为以重用它。

public class MyEntity
{
// I want this property to be considered a string by EF (it is castable to string)
public MultilingualString MyProperty { get; set; }
}

public class MultilingualString
{
public static implicit operator string(MultilingualString mlString)
{
return mlString.ToJson();
}

public static explicit operator MultilingualString(string json)
{
return new MultilingualString(json);
}

...
}

最佳答案

三个想法:

一种是从 T4 模板生成您的类,该模板将生成支持字段和 [NotMapped] MultilingualString。从技术上讲,您将编写更少的代码,并且每个 T4 模板都可以使用您从另一个程序集中输入的方法,以避免在每个模板中重复生成代码。不过,我承认这个想法不会让你感觉好些。

想到二是使用PostSharp , 归因于您的支持字段并让 PostSharp 扩展创建多语言字段,反之亦然。这样做的最大缺点是静态分析工具不太喜欢它。

想法三是让MultilingualString成为ComplexType它包含作为公共(public)属性的字符串字段,并且还具有您构建的类目前要执行的任何其他方法。如果您关心的话,它会生成一个更困惑的数据库列名。

我认为 3 最有值(value)。

编辑:

对于选项 3,如果需要,您可以控制列名称:

modelBuilder.Entity<MyEntity>().Property(x => x.MyProperty.StringValue)
.HasColumnName("i_dba_aprvd_rdbl_col_nm")

如果存在可以确定列名称的规则,则没有理由不能使用反射生成这种流畅的配置来查找所有这些复杂的属性值,例如它是实体上 MultilingualString 类型的属性的名称。

关于c# - 在发送到数据库之前,使 EF 将可转换为字符串类型的属性转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26410844/

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