Как использовать Entity Framework для сопоставления результатов хранимой процедуры с сущностью с параметрами с разными именами

Я пытаюсь создать базовый пример, используя Entity Framework для сопоставления вывода хранимой процедуры SQL Server с сущностью в C #, но сущность имеет параметры имен (дружественных) по-разному, в отличие от более загадочных имен. Я также пытаюсь сделать это с помощью синтаксиса Fluent (т.е. не edmx).

Что работает ....

Хранимая процедура возвращает значения, называемые: UT_ID, UT_LONG_NM, UT_STR_AD, UT_CITY_AD, UT_ST_AD, UT_ZIP_CD_AD, UT_CT

Если я создаю такой объект ...

public class DBUnitEntity
{
    public Int16 UT_ID { get; set; }
    public string UT_LONG_NM { get; set; }
    public string UT_STR_AD { get; set; }
    public string UT_CITY_AD { get; set; }
    public string UT_ST_AD { get; set; }
    public Int32 UT_ZIP_CD_AD { get; set; }
    public string UT_CT { get; set; } 
}

и EntityTypeConfiguration, как это ...

public class DbUnitMapping: EntityTypeConfiguration<DBUnitEntity>
{
        public DbUnitMapping()
        {
            HasKey(t => t.UT_ID);
        }
}

... который я добавляю в OnModelCreating DbContext, тогда я могу просто получить сущности из базы данных, что хорошо, используя это ....

var allUnits = _context.Database.SqlQuery<DBUnitEntity>(StoredProcedureHelper.GetAllUnitsProc);

НО, что не работает

Если я хочу сущность, подобную этой, с более дружелюбными именами ....

public class UnitEntity : IUnit
{
    public Int16 UnitId { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public Int32 Zip { get; set; }
    public string Category { get; set; }
}

и EntityTypeConfiguration, как это ...

    public UnitMapping()
    {
        HasKey(t => t.UnitId);

        Property(t => t.UnitId).HasColumnName("UT_ID");
        Property(t => t.Name).HasColumnName("UT_LONG_NM");
        Property(t => t.Address).HasColumnName("UT_STR_AD");
        Property(t => t.City).HasColumnName("UT_CITY_AD");
        Property(t => t.State).HasColumnName("UT_ST_AD");
        Property(t => t.Zip).HasColumnName("UT_ZIP_CD_AD");
        Property(t => t.Category).HasColumnName("UT_CT");
    }

Когда я пытаюсь получить данные, я получаю System.Data.EntityCommandExecutionException с сообщением ....

«Средство чтения данных несовместимо с указанным« DataAccess.EFCodeFirstSample.UnitEntity ». Элемент типа« UnitId »не имеет соответствующего столбца в средстве чтения данных с тем же именем».

Если я добавлю свойство «хранимая процедура с именем» к сущности, он пойдет и пожалуется на следующее «неизвестное» свойство.

Разве «HasColumnName» не работает так, как я ожидаю / хочу, чтобы в этой беглой стилевой процедуре, свободной от кода, в EF?

Обновить:

Пробовал с использованием DataAnnotations (ключ от ComponentModel и столбец из EntityFramework) ... аля

public class UnitEntity : IUnit
{
    [Key]
    [Column("UT_ID")]
    public Int16 UnitId { get; set; }
    public string Name { get; set; }

Это исключило необходимость в какой-либо EntityTypeConfiguration для DBUnitEntity с идентификатором, идентичным базе данных (т.е. просто добавив атрибут [Key]), но ничего не сделало для объекта с именами свойств, которые не соответствуют базе данных (та же ошибка как прежде).

Я не против использовать аннотации ComponentModel в модели, но я действительно не хочу использовать аннотации EntityFramework в модели, если я могу помочь (не хочу связывать модель с какой-либо конкретной структурой доступа к данным)

Ответы на вопрос(3)

Ваш ответ на вопрос