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

Я использую Entity Framework CodeFirst с существующей базой данных. У меня есть хранимая процедура, которая возвращает данные из таблицы Customer_Info с двумя столбцами Customer_ID, Customer_Name. Я создал класс для этой сущности под названием Customer с двумя свойствами CustomerID, CustomerName. Теперь я пытаюсь получить данные через эту хранимую процедуру. У меня есть такое сопоставление, определенное в моем методе OnModelCreating.

modelBuilder.Entity<Customer>().ToTable("Customer_Info");
modelBuilder.Entity<Customer>().
                 Property(x => x.CustomerID).HasColumnName("Customer_ID");

Вот как я пытаюсь получить данные из хранимой процедуры и загрузить данные в сущность.

public IList<Customer> GetCustomers()
{
  return context.Database.SqlQuery<Customer>("exec GetCustomers @p0","NY")
                                                                       .ToList();
}

Но это не сработало! Это выдает мне ошибку, говорящую так

Считыватель данных несовместим с указанным «Клиентом». Член типа «CustomerID» не имеет соответствующего столбца в средстве чтения данных с таким же именем.

Как это исправить ? Если я читаю напрямую из таблицы, мое сопоставление свойств работает.


person Happy    schedule 21.06.2012    source источник


Ответы (1)


Либо измените хранимую процедуру, чтобы использовать что-то вроде

SELECT Customer_ID AS CustomerID, Customer_Info AS CustomerName ...

или измените свойства в вашем классе Customer на Customer_ID и Customer_Info. Сначала вы используете код, и он не поддерживает сопоставление хранимых процедур. Он использует простое встроенное сопоставление, в котором имя свойства сопоставляется с именем столбца по его имени.

Если вы хотите отобразить набор результатов хранимой процедуры, вы должны сначала отказаться от кода и использовать EDMX.

person Ladislav Mrnka    schedule 21.06.2012