如何在 EF 代理 类 中使用 CreateMissingTypeMaps 选项和手动映射?
How to use CreateMissingTypeMaps option and manual mappings with EF Proxy Classes?
我的情况需要在 "same time"(或至少在相同配置)使用 CreateMissingTypeMaps 和手动映射。
场景:域和视图模型 类 是使用配置文件手动映射的。 CreateMissingTypeMaps 属性 是必需的,因为我有一个反腐败层来访问遗留系统至极 returns 匿名对象。
问题是当手动映射设置为 true 时,它的映射会被 CreateMissingTypeMaps 选项覆盖,而当它设置为 false 时我无法映射匿名对象。
我尝试在 MapperConfiguration 内部、配置文件内部以及具有映射条件的配置文件内部设置 CreateMissingTypeMaps,但都失败了。
下面的代码是我尝试做一个应该只应用于匿名对象的条件配置文件。
public class AnonymousProfile : Profile
{
public AnonymousProfile()
{
AddConditionalObjectMapper().Where((s, d) => s.GetType().IsAnonymousType());
CreateMissingTypeMaps = true;
}
}
// inside my MapperConfiguration
cfg.AddProfile(new AnonymousProfile()); // also tried cfg.CreateMissingTypeMaps = true;
[编辑:] 最初的问题没有提到 EF,但我发现它的代理 类 是问题的一部分。
我按照泰勒在 Github 上指出的 these 方向重构了我的代码。
- 我的 anonymous type check 有一个错误(我不应该使用 GetType)
- 必须忽略来自 System.Data.Entity.DynamicProxies 的对象
我重写的 AnonymousProfile class:
public class AnonymousProfile : Profile
{
public AnonymousProfile()
{
AddConditionalObjectMapper().Where((s, d) =>
s.IsAnonymousType() && s.Namespace != "System.Data.Entity.DynamicProxies");
}
}
我的情况需要在 "same time"(或至少在相同配置)使用 CreateMissingTypeMaps 和手动映射。
场景:域和视图模型 类 是使用配置文件手动映射的。 CreateMissingTypeMaps 属性 是必需的,因为我有一个反腐败层来访问遗留系统至极 returns 匿名对象。
问题是当手动映射设置为 true 时,它的映射会被 CreateMissingTypeMaps 选项覆盖,而当它设置为 false 时我无法映射匿名对象。
我尝试在 MapperConfiguration 内部、配置文件内部以及具有映射条件的配置文件内部设置 CreateMissingTypeMaps,但都失败了。
下面的代码是我尝试做一个应该只应用于匿名对象的条件配置文件。
public class AnonymousProfile : Profile
{
public AnonymousProfile()
{
AddConditionalObjectMapper().Where((s, d) => s.GetType().IsAnonymousType());
CreateMissingTypeMaps = true;
}
}
// inside my MapperConfiguration
cfg.AddProfile(new AnonymousProfile()); // also tried cfg.CreateMissingTypeMaps = true;
[编辑:] 最初的问题没有提到 EF,但我发现它的代理 类 是问题的一部分。
我按照泰勒在 Github 上指出的 these 方向重构了我的代码。
- 我的 anonymous type check 有一个错误(我不应该使用 GetType)
- 必须忽略来自 System.Data.Entity.DynamicProxies 的对象
我重写的 AnonymousProfile class:
public class AnonymousProfile : Profile
{
public AnonymousProfile()
{
AddConditionalObjectMapper().Where((s, d) =>
s.IsAnonymousType() && s.Namespace != "System.Data.Entity.DynamicProxies");
}
}