4

我正在使用 ValueInjecter 映射两个相同的对象。我遇到的问题是 ValueInjector 从我的源复制空值到我的目标。所以我将大量数据丢失为空值。

这是我的对象的一个​​示例,它有时只填充了一半,导致其空值覆盖目标对象。

public class MyObject()
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<OtherObject> OtherObjects { get; set; }
}

to.InjectFrom(from);
4

3 回答 3

3

对于使用ValueInjecterv3+ 的用户,ConventionInjection已弃用。使用以下实现相同的结果:

public class NoNullsInjection : LoopInjection
{
    protected override void SetValue(object source, object target, PropertyInfo sp, PropertyInfo tp)
    {
        if (sp.GetValue(source) == null) return;
        base.SetValue(source, target, sp, tp);
    }
}

用法:

target.InjectFrom<NoNullsInjection>(source);
于 2016-05-04T12:32:07.827 回答
1

在这种情况下,您需要创建一个自定义 ConventionInjection。参见示例 #2: http: //valueinjecter.codeplex.com/wikipage ?title=step%20by%20step%20explanation&referringTitle=Home

因此,您需要重写 Match 方法:

protected override bool Match(ConventionInfo c){
    //Use ConventionInfo parameter to access the source property value
    //For instance, return true if the property value is not null.
}
于 2012-05-15T22:31:48.833 回答
1

你想要这样的东西。

public class NoNullsInjection : ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return c.SourceProp.Name == c.TargetProp.Name
                && c.SourceProp.Value != null;
    }
}

用法:

target.InjectFrom(new NoNullsInjection(), source);
于 2014-05-16T13:17:55.643 回答