【发布时间】:2017-04-24 12:06:13
【问题描述】:
我有一张桌子留言:
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(Email、SMS)解析。是否可以使用 Automapper 获取具有特定状态的所有消息,以便将某些消息映射到 EmailMessageDTO,将其他消息映射到 SMSMessageDTO?我想编写一个 GetMessages 方法,根据消息类型返回所有消息,对象为 EmailMessageDTO 或 SMSMessageDTO。
【问题讨论】:
-
您是否尝试过类似的操作:stackoverflow.com/questions/9746650/… - 本质上是使用
ConstructUsing函数并映射到基本类型 - 任何映射都将通过ConstructUsing创建其实例。唯一的问题可能是特定的映射选项可能无法使用,我不确定 AutoMapper 是否会意识到它不再是dto -> base映射并使用更具体的映射配置。 -
我看到了那个解决方案,它帮我解决了这个问题!
标签: c# sql automapper dto