0

既存のデータベースで Entity Framework CodeFirst を使用しています。Customer_Info2 列のテーブルからデータを返す既存のストアド プロシージャがありますCustomer_ID, Customer_NameCustomer2 つの 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_IDますCustomer_Info。最初にコードを使用しており、ストアド プロシージャ マッピングをサポートしていません。プロパティの名前がその名前で列の名前と一致する単純な組み込みマッピングを使用します。

ストアド プロシージャの結果セットをマップする場合は、まずコードを放棄して EDMX を使用する必要があります。

于 2012-06-21T13:26:41.453 に答える