0

我将实体框架 CodeFirst 与现有数据库一起使用。我有一个现有的存储过程,它从Customer_Info具有 2 列的表中返回数据Customer_ID, Customer_Name。我为这个实体创建了一个名为Customer2 Properties的类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”在数据读取器中没有同名的对应列。

我该如何解决 ?如果我直接从表中读取,我的属性映射有效。

4

1 回答 1

0

修改您的存储过程以使用类似的东西

SELECT Customer_ID AS CustomerID, Customer_Info AS CustomerName ...

或将您的Customer类中的属性修改为Customer_IDand Customer_Info。您首先使用代码,它不支持存储过程映射。它使用简单的内置映射,其中属性名称与其名称匹配的列名称。

如果要映射存储过程结果集,必须先放弃代码并使用 EDMX。

于 2012-06-21T13:26:41.453 回答