在不知道要返回的List <type>的情况下检索通用数据是可能的吗?

时间:2016-03-22 13:50:10

标签: c# .net visual-studio generics automapper

我不知道问题是否正确但我需要做的是从messagetoprocess存储库方法中获取正确的实体以及相应的数据,在这种情况下我该怎么做? (以下代码)

我正在使用AutoMapper。

我知道我可以创建一个MessageEntity并消除接口并将所有属性放在一起,但这正是我不想做的事情。

这就是我所拥有的:

接口

public interface IMessage
{
    string MessageFrom { get; set; }
    string MessageTo { get; set; }
{

实施者实体

public class EmailMessageEntity : IMessage
{
    public bool IsMessageBodyHtml { get; set; }
}

public class SmsMessageEntity : IMessage
{
    public bool IsMmsMessage { get; set; }
}

型号:

public class EmailMessage
{
    public string MessageFrom { get; set; }
    public string MessageTo { get; set; }    
    public bool IsMessageBodyHtml { get; set; }
}
public class SMSMessage
{
    public string MessageFrom { get; set; }
    public string MessageTo { get; set; }
    public bool IsMmsMessage { get; set; }
}

Repositry:

 public static List<*****Entity problem*****> RetrieveMessageToProcess()
 {
     var commandSettings = new CommandSettings
     {
         CommandText = @"[Schema].[RetrieveMessageToProcess]",
         CommandType = CommandType.StoredProcedure
     };

     return new MsSqlProviderBase(DbConnectionString, commandSettings).ExecuteQuery<*****Entity problem*****>();
  }

使用它:

//code excerpt

var messagesToProcess = Db.RetrieveMessageToProcess(); //repository

if (messagesToProcess == null) return;

// Process Message(s)
foreach (var messageEntity in messagesToProcess)
{
    if (Email) // this is just the verification example not the actual statement and not a variable
    {
        Mapper.CreateMap<EmailMessageEntity, EmailMessage>();
        var emailMessage = Mapper.Map<EmailMessage>(messageEntity);
    }
    else if (SMS) 
    {
        Mapper.CreateMap<SMSMessageEntity, SMSMessage>();
        var smsMessage = Mapper.Map<SmsMessage>(messageEntity);
    }
 }

1 个答案:

答案 0 :(得分:1)

您是否可以考虑在MessageType界面上设置IMessage成员而不是两个IsXXX属性?

您可以返回枚举或您认为合适的任何其他值,并在if(EMAIL)声明中使用该值。