0
我有一个表的消息:自动映射一个表实体两个DTO子
CREATE TABLE [Communication].[Message]
(
[MessageID] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[MessageChannelID] INT NOT NULL,
[MessageStatusID] INT NOT NULL,
[Sender] NVARCHAR(100) NOT NULL,
[SenderDisplayName] NVARCHAR(100) NULL,
[Receiver] NVARCHAR(100) NOT NULL,
[Content] NVARCHAR(MAX) NULL,
[EmailUseSSL] BIT NOT NULL DEFAULT 0,
[EmailReceiverCC] NVARCHAR(100) NULL,
[EmailReceiverBCC] NVARCHAR(100) NULL,
[EmailSenderReplyTo] NVARCHAR(100) NULL,
[EmailSubject] NVARCHAR(300) NULL,
[SMSGUID] NVARCHAR(100) NULL,
[CreatedAt] DATETIME NOT NULL DEFAULT getDate(),
[Note] NVARCHAR(300) NULL,
CONSTRAINT [FK_Message_MessageStatus] FOREIGN KEY ([MessageStatusID]) REFERENCES [Communication].[MessageStatus]([MessageStatusID]),
CONSTRAINT [FK_Message_MessageChannel] FOREIGN KEY ([MessageChannelID]) REFERENCES [Communication].[MessageChannel]([MessageChannelID])
)
而且我有DTO类:
public class MessageDTO
{
public int MessageID { get; set; }
public string Sender { get; set; }
public string SenderDisplayName { get; set; }
public string Receiver { get; set; }
public string Content { get; set; }
public DateTime CreatedAt { get; internal set; }
public string Note { get; set; }
public MessageStatus Status { get; set; }
public MessageChannel Channel { get; internal set; }
}
public class EmailMessageDTO: MessageDTO
{
public bool EmailUseSSL { get; set; }
public string EmailReceiverCC { get; set; }
public string EmailReceiverBCC { get; set; }
public string EmailSenderReplyTo { get; set; }
public string EmailSubject { get; set; }
}
public class SMSMessageDTO: MessageDTO
{
public string SMSGUID { get; set; }
}
消息类型可以从MessageChannelID(电子邮件,SMS)来解决。是否有可能使用Automapper来获取具有特定状态的所有消息,以便将某些消息映射到EmailMessageDTO,并将其他消息映射到SMSMessageDTO?我想编写一个GetMessages方法,它根据消息类型返回所有消息,包含对象EmailMessageDTO或SMSMessageDTO。
你有没有尝试过这样的:http://stackoverflow.com/questions/9746650/automapper-conditional-mapping-for-type - 实质上是使用'ConstructUsing'函数和映射到基类型 - 任何映射都将通过'ConstructUsing'创建它们的实例。唯一的问题可能是特定的映射选项可能不可行,我不确定AutoMapper是否会意识到它不再是'dto - > base'映射并使用更具体的映射配置。 – Charleh
我看到了这个解决方案,它帮助我解决了这个问题! – vpetrovic