问题标签 [valueinjecter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
automapper - 使用 ValueInjector 或 Automapper 时,如何防止“目标”对象中的值被“源”对象的空值覆盖?嵌套映射问题?
我的问题
“源”对象视图中不存在的同一类的属性用空值覆盖“目标”对象中的相同属性。我该如何防止这种情况?影响我如何确保仅填充(非空)属性合并到“目标”对象中。我也用 Automapper 尝试过,但失败了,但我很乐意使用 Automapper 解决方案作为替代方案。
我很欣赏这个“空映射”问题以前出现过,但我担心我的情况会更复杂,因为有嵌套对象。好吧,我尝试了建议的选项,但无法使它们起作用。所以我在这里。
非常感谢任何帮助。
我很欣赏这是一个复杂的问题,并且真的非常感谢任何帮助,特别是如果有人可以为我制作代码示例。这几天我把头发拉出来了:(
我尝试过的
我有 2 个对象,一个是原始对象(“目标”),一个(“源”)由一个表单(即视图)填充。
原始的“目标”对象(myOrigDoc)如下所示:
表单“源”对象(myDoc)如下所示:
然后我做映射:
使用以下注射器:
我最终得到:
表单上没有“DateOfBirth”字段,因此我怀疑模型绑定正在为新的“MyDoc”对象上的“DataOfBirth”属性创建空值,当我调用时:
非常感谢,埃德。
EDIT1:我相信这是由于子类的嵌套映射问题。不确定我如何在 ValueInjector 中对其进行排序。
EDIT2:嵌套映射文档中可能的 Automapper 解决方案,但我无法让它工作。我仍然让我的空值进入目标。:
c# - 将实体与父实体映射时的 ValueInjector Stack Overflow
我正在使用 ValueInjecter 来处理我的 POCO 实体到我的 DTO 实体的映射。我一直在使用Automapper Simulation作为我的主要映射器。这使我可以简单地编写如下映射:
这一直很好,直到我需要从我的数据库中获取具有父子关系的实体。问题是我一直在使用的这段代码将递归地遍历所有属性。如果我有一个像这样的 POCO,
我的代码将在无限循环中爆炸,试图映射循环引用。我想继续使用 Automapper Simulation 源作为我的主要映射器,但我一直在弄清楚如何解决我的问题。任何帮助,将不胜感激!
vb.net - ValueInjecter 和 ICollection(ViewModel 的)
我有两个相关的简单视图模型。我可以通过 linq include 语句查询数据,但是当我将其注入视图模型时,icollection 什么都不是?
视图模型:
询问:
用户在对象中!
注射:
用户什么都不是?
c# - 使用 valueinjecter 将 EF4 var 对象映射到 DTO
我有如下的 linQ 查询
人员表有很多字段,但我只需要使用 ID 和名称。同样,对于 BankAccount,我只需要使用 ID、AccountType 和 AccountBalance
然后我将上面的记录 var 类型传递给另一个映射器类,方法如下
CompositeDTO 如下
问题是我无法将任何值放入我的类型对象CompositeDTO
中dto.InjectFrom(rec )
这应该怎么做?此处的文档仅说明了如何为来自两个不同源类的一个字段执行此操作。我错过了什么吗?这可以做到吗?
c# - 使用 ValueInjecter 展平
我尝试使用ValueInjecter将多个对象映射到视图模型对象。但它不像我预期的那样工作。
代码:
预期输出:
有效输出:
注意
,Call.Number
表示为Number
inCallViewModel
被 覆盖Customer.Number
。两者CustomerName
并OperationTimeFrom
永远不会获得其指定来源的值Customer.Name
和Operation.TimeFrom
。
在那种情况下我该怎么办?ValueInjecter 甚至支持这种情况吗?
automapper - ValueInjecter - 将源的某些属性转换为目标中的列表
刚开始使用 Value Injector: http: //valueinjecter.codeplex.com/,我有一个问题:
我有一个具有许多属性的 Source 类。某些属性具有“配置文件”的通用后缀。这些属性并不总是字符串,但大部分都是。目标有 1 个属性,Dictionary<string, string>
。我希望所有以“配置文件”结尾的属性都插入到Dictionary<string, string>
key = PropertyName 和 value = Property 的值中。我认为可以做到,但文档对我来说不是很清楚。有人可以指出我正确的方向吗?谢谢!
c# - 是否有我可以 GAC 的 ValueInjecter 签名版本?
是否有我可以 GAC 的 ValueInjecter 签名版本?我需要一个强命名的版本,以便它可以被 GAC'ed。
c# - 更新此扩展以处理 FlatLoopValueInjection
我在 stackoverflow 上找到了这段代码,但我注意到它无法处理 FlatLoopValueInjection,我想让它处理这个,但我不知道如何处理。
我知道这需要更新 target.InjectFrom(source);
,但我不确定如果它可以接受任何东西(FlatLoopValueInjection、UnflatLoopValueInjection 等)并使用它会更好
asp.net-mvc - MVC ViewModel 方法和映射。最佳方法
我一直在研究使用 MVC 解决批量分配问题以及以正确方式做事的不同方法。
到目前为止,我认为最好的两种方法如下:(我也看过 AutoMapper)
1:Value Injecter - 这似乎做得很好,但也依赖于第三方库
2:使用 UpdateModel 方法并绑定到视图模型接口,该接口公开了域模型中所需属性的子集。http://www.codethinked.com/easy-and-safe-model-binding-in-aspnet-mvc
在我使用上述实践之一开始编写整个应用程序(无需花费一周时间来找出我真正喜欢哪个)之前,是否有人有使用这两种方法的实际经验,你会推荐哪一种?
c# - 使用 ValueInjecter 将 EntityFramework POCO 复制到 DTO 而不触发延迟加载列表和属性
我在使用 ValueInjecter 将 EntityFramework POCO 的深度克隆创建到类似的 DTO 类时遇到问题。
如果我从具有多个相关实体/具有导航属性的子实体的复杂 POCO 对象注入到稍微简单的 DTO 中,ValueInjecter 似乎仍然会触及多个属性值并导致从数据库中延迟加载此数据。
我相信是 ValueInjecter 在准备将值注入指定目标时获取特定源对象中每个属性的值。
我的实际项目相当复杂,但作为一个例子,我以 NerdDinner 为例并以更简单的方式复制了这个问题。(NerdDinner 是使用 EF4 进行代码优先开发的示例(ScottGu NerdDinner 示例)。
所以我有两个模型类。
和
我还创建了一个 DTO 类:
请注意,我Dinner
的DinnerDTO
.
同样重要的是,我使用 CloneInjection 约定来深度克隆对象。在 SO 以及许多其他站点上都建议使用此代码作为执行深度克隆注入的方法。此代码可在此处找到:CloneInjection 代码
现在,为了强调发生的延迟加载,我去插入了 10,000 个 RSVP 用于 Id = 1 的晚餐。
然后我执行以下代码:
如果我在带有 的行设置断点InjectFrom
,然后跨过它,则会有相当大的延迟,因为它会延迟加载 10,000 个 RSVP。如果我还在 CloneInjection 代码中同时在Match
和SetValue
方法中设置断点,则在加载滞后解决之前,这些都不会被命中。这告诉我,它必须是 ValueInjecter 内部的东西,它会导致RSVPs
属性的延迟加载。
现在,如果我将上面的代码修改为:(Include
在查询中添加一个)
此更改强制 RSVP 列表的“急切加载”,并且正如预期的那样,延迟与查询一致,并且该InjectFrom
行完全没有延迟。
我已经阅读了 StackOverflow 上一些模糊相关的帖子,其中一些建议在数据上下文上禁用然后启用 LazyLoading。我试过了,虽然它确实有效,但感觉很脏。
我通读了这篇文章(将 NHibernate POCO 复制到 DTO 而不会触发延迟加载或急切加载)和相关代码,他的方法似乎是使用一些 NHibernate 方法来确定属性是否是未初始化的代理并以某种方式将它们剥离。我一直无法在 EF4 中找到类似的东西。
真正让我感到困惑的部分是,Rsvps 集合甚至不在我的 DTO 对象中,我什至对它的价值都不感兴趣。这对我来说似乎不正确。我认为 ValueInjecter 代码不应该询问目标对象甚至可能不关心的属性值。
有什么方法可以覆盖 ValueInjecter 中的这种行为吗?以某种方式推迟对属性值的评估,直到绝对确定我想要该值,例如SetValue
在ConventionInjection
? 那么至少它不会评估我的 DTO 甚至不想要的属性。
我能想到的最佳解决方案是让 ValueInjecter 或自定义约定以某种方式能够检测到已卸载的延迟加载属性,而不是对其进行评估,而是将目标上的该属性设置为 null。我不认为这是可能的。
我应该使用通过 EF 的更好方法吗?我不想急切地加载数据库中的所有内容。
我完全关闭了,问题根本不在于 ValueInjecter 吗?
* 编辑 * 我找到了解决方案并回答了这个问题,我仍然很好奇我是不是做错了,或者是否还有更好的方法。