1

我正在尝试创建一个返回IRowMapper<T>. 这是我的课程:

public abstract class Person
{
    public int Id { get; set; }

    protected void Person() { }

    protected void Person(int id)
    {
        Id = id;
    }
}

public class Employer : Person
{
    public int EmployeeId { get; set; }

    public void Employer() { }

    public void Employer(int id, int employeeId) : base(id)
    {
        EmployeeId = employeeId;
    }
}

public class Employee : Person
{
    public int EmployerId { get; set; }

    public void Employee() { }

    public void Employee(int id, int employerId) : base(id)
    {
        EmployerId = employerId;
    }
}

public static class MapBuilder<TResult> where TResult : new()
{
    // ...
}

public interface IRowMapper<TResult>
{
    TResult MapRow(IDataRecord row);
}

现在我想做的是如下所示:

private IRowMapper<T> GetRowMapper<T>() where T : Person, new()
{
    var rowMapper = MapBuilder<T>.MapNoProperties()
                                    .Map(c => c.Id).ToColumn("ID");

    if (typeof (T) == typeof (Employee))
    {
        rowMapper =
            ((MapBuilder<Employee>) rowMapper).Map(c => c.EmployerId)
                                                .ToColumn("EmployerID");
    }
    else if (typeof (T) == typeof (Employer))
    {
        rowMapper =
            ((MapBuilder<Employer>) rowMapper).Map(c => c.EmployeeId)
                                                .ToColumn("EmployeeId");
    }

    return rowMapper.Build();
}

但我收到以下错误:

错误 2 无法将类型“Microsoft.Practices.EnterpriseLibrary.Data.IMapBuilderContext”转换为“Microsoft.Practices.EnterpriseLibrary.Data.MapBuilder”

错误 2 无法将类型“Microsoft.Practices.EnterpriseLibrary.Data.IMapBuilderContext”转换为“Microsoft.Practices.EnterpriseLibrary.Data.MapBuilder”

为什么演员阵容不行?

4

1 回答 1

1

我对这个库不太熟悉,但看起来每个方法的返回值都是一个IMapBuilderContext<T>,并且它是用典型的流利风格编写的。

我认为这可能对你有用:

private IRowMapper<T> GetRowMapper<T>() where T : Person, new()
{
    var rowMapper = MapBuilder<T>.MapNoProperties()
                                 .Map(c => c.Id).ToColumn("ID");

    if (typeof (T) == typeof (Employee))
    {
        rowMapper = ((IMapBuilderContextMap<Employee>)rowMapper)
            .Map(c => c.EmployerId).ToColumn("EmployerID");
    }
    else if (typeof (T) == typeof (Employer))
    {
        rowMapper = ((IMapBuilderContextMap<Employer>)rowMapper)
            .Map(c => c.EmployeeId).ToColumn("EmployeeId");
    }

    return rowMapper.Build();
}
于 2013-05-08T21:00:40.210 回答