English 中文(简体)
A. 非标准继承图
原标题:Non standard inheritance mapping with AutoMapper

我在我的行文中拥有“稳定继承”的字句(在世系中,后裔与外国钥匙相联),并利用Linq To Sql作为我的DAL:

[Table]
class Document {
    [Column]public int ID { get; set; }
    [Column]public int DocTypeID { get; set; }
    [Association]public Application Application { get; set; }
}

[Table]
class Application {
    [Column]public int ID { get; set; }
    [Column]public string AppType { get; set; }
    [Association]public Document Document {get;set}
}

由于L2S不支持多功能继承:<代码>Application不继承。 然而,在我的实体类别中,我确实想要继承:

class DocumentBase {
    public int ID { get; set; }
    public int DocTypeID { get; set; }
}

class MyApplication : DocumentBase {
    public string AppType { get; set; }
}

• 绘制地图:

Mapper.CreateMap<Document, DocumentBase>();
Mapper.CreateMap<Application, MyApplication>();

但是,AutoMapper就未绘制的上的基质提出抱怨。 我不想在<代码>MyApplication地图上重复基质(从DocumentBase到许多后代)。 我发现,很少有提议习惯的员额(ITypeConverter),但没有了解如何适用于我的情况。 做些什么?

最佳回答

创建网站solution,其中也有抱怨没有绘制地图但稍作改动的基质:

static void InheritMappingFromBaseType<S, D>(this IMappingExpression<S, D> mappingExpression)
    where S: Document
    where D: DocumentBase
{
    mappingExpression // add any other props of Document
        .ForMember(d => d.DocTypeId, opt => opt.MapFrom(s => s.Document.DocTypeId);
}

现在可以与每个<代码>DocumentBase的后代地图链接:

Mapper.CreateMap<Application, MyApplication>()
    .InheritMappingFromBaseType();

AssertConfigurationIsValid(感到高兴。

问题回答

问题是,DocTypeId没有绘制地图。 引言

    Mapper.CreateMap<Document, DocumentBase>();
    Mapper.CreateMap<Application, MyApplication>()
          .ForMember(d => d.DocTypeId, opt => opt.MapFrom(s => s.Document.ID);

发表评论后:

你们可以这样援引基图人。

Mapper.CreateMap<Document, DocumentBase>();
    Mapper.CreateMap<Application, MyApplication>()
    .AfterMap((app, myApp) => Map<Document, DocumentBase>(app.Document, myApp);




相关问题
Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How do I compare two decimals to 10 decimal places?

I m using decimal type (.net), and I want to see if two numbers are equal. But I only want to be accurate to 10 decimal places. For example take these three numbers. I want them all to be equal. 0....

Exception practices when creating a SynchronizationContext?

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks. The SynchronizationContext can be used ...

Show running instance in single instance application

I am building an application with C#. I managed to turn this into a single instance application by checking if the same process is already running. Process[] pname = Process.GetProcessesByName("...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签