【问题标题】:Save generic complex property as a serialized column using Entity Framework使用实体框架将通用复杂属性保存为序列化列
【发布时间】:2018-12-01 20:01:55
【问题描述】:

如果我有如下模型,如何将其保存到数据库中,以便将通用复杂属性表示为单个文本列?

public class Tracker<T> : BaseModel where T : BaseModel
{
    public T Model { get; set; }
}

我见过非泛型复杂类型的例子,但没有泛型类型的例子。

【问题讨论】:

  • 你能发布非通用的例子吗?

标签: c# entity-framework serialization


【解决方案1】:

当您想要将复杂(非标量)类型存储在单个列中时,您需要提供 .NET 类型到存储类型和格式的自定义转换(例如,将对象序列化为字符串并存储在 NVarchar 中(最大)列)。

在 EF 6 中,您使用 NotMapped 属性执行此操作,该属性读取和写入映射的字符串属性。

在 EF Core 中,您可以通过使用 Value Conversions 来避免拥有两个属性。

【讨论】:

  • 有趣的是,当使用值转换时(下面的示例),EF核心仍然在OnModelCreating期间在数据库中创建一个表:modelBuilder.Entity(entity.Name).Property' (property.Name ).HasConversion( x => $"{x.Currency} {x.Amount}", x => MoneyParser.Parse(x));
猜你喜欢
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多