Search code examples
c#csvhelper

Register only ReferencesMap in csvhelper cause an error


I want to create a only ReferencesMap class.
CompositeMap hold references to AMap and BMap.

When calling

csv.Configuration.RegisterClassMap<CompositeMap>();

I get an error:

No members were found in expression '{expression}'.

My code:

public class A
{
    public int ID { get; set; }
}

public class B
{
    public string Name { get; set; }
}

public sealed class AMap : ClassMap<A>
{
    public AMap()
    {
        Map(m => m.ID);
    }
}

public sealed class BMap : ClassMap<B>
{
    public BMap()
    {
        Map(m => m.Name);
    }
}


public class Composite
{
    public A a { get; set; }
    public B b { get; set; }
}

public sealed class CompositeMap : ClassMap<Composite>
{
    public CompositeMap()
    {
        References<AMap>(m => m.a);
        References<BMap>(m => m.b);
    }
}

Any idea why? How can I do this?


Solution

  • The recommended way to map down an object graph is to do all the mapping in the top node.

    public sealed class CompositeMap : ClassMap<Composite>
    {
        public CompositeMap()
        {
            Map(m => m.a.ID);
            Map(m => m.b.Name);
        }
    }
    

    If you have a specific reason you need to use References, let me know and I can update the answer.