【发布时间】:2017-02-28 19:09:37
【问题描述】:
我正在尝试在我的实体中实现属性版本跟踪。使用TrackedProperty 的架构作为我的可跟踪属性;
public class PropertyVersion<TValue, TVersion>
{
public TVersion Version { get; set; }
public TValue Value { get; set; }
}
public class TrackedProperty<TValue, TVersion> : List<PropertyVersion<TValue, TVersion>>
{
}
例如,在我的存储库中,我将保留TrackedFoo 对象,并且我将能够从Foo 中检索特定版本的数据(在这种情况下,该版本被描述为时间对象)。
public class TrackedFoo
{
public string Id { get; set; }
public TrackedProperty<string, DateTime> Name { get; set; }
}
public class Foo
{
public string Id { get; set; }
public string Name { get; set; }
}
我希望尽可能保持通用性。所以我尝试使用 AutoMapper,但我无法以通用方式配置它,我不需要配置每个 TrackedTypeX 到 TypeX 的映射。
我需要获取 TrackedProperty 中的最后一个 PropertyVersion 项并将其 Value 属性映射到 TValue 类型
你能帮我找到解决这个问题的方法吗?
我可以使用
减少变量类型的数量(这就是你所说的 之间的东西吗?,无论如何)DateTrackedProperty<TValue> : TrackedProperty<TValue,DateTime>
IntegerTrackedProperty<TValue> : TrackedProperty<TValue, int>
StringTrackedProperty<TValue> : TrackedProperty<TValue, string>
我可以为这三种类型编写 AutoMapper 配置。
【问题讨论】:
-
好的,在谈到泛型映射之前,从
TrackedFoo到Foo的具体映射是什么?更具体地说,您将如何将TrackedProperty<string, DateTime>转换为string? -
@IvanStoev, TrackedProperty
具有字符串值属性。所以我只需要得到那个值,不需要花哨的转换 -
啊哈,你为什么不在问题中显示它呢? :)
-
@IvanStoev 抱歉。 TrackedProperty
没有 Value 属性。它实际上是包含 value 属性的 PropertyVersion 列表。我需要获取 TrackedProperty 中的最后一个 PropertyVersion 并使用那个。
标签: c# generics automapper