次のことができるようになりたいです。
私にはモデルがあり、その中にエンティティがあります。
このエンティティの構造は次のとおりです。
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
私が今欲しいのは、IDに基づいてクライアント名を取得することです。したがって、これを行うストアドプロシージャを作成しました。
CREATE PROCEDURE [Client].[GetBasics]
@Id INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT
Name
FROM Client.Client
INNER JOIN Client.Validity ON ClientId = Client.Id
WHERE
Client.Id = @Id;
END
ここで VS に戻り、ストアド プロシージャを含めてデータベースからモデルを更新します。
次のステップは、このストアド プロシージャを関数インポートとしてクライアント エンティティにマップすることです。
これもうまくいきます。
1 つのクライアントの名前を読み込もうとすると、実行時にエラーが発生します...
「データ リーダーは、指定された 'CSTestModel.Client' と互換性がありません。タイプ 'Id' のメンバーには、データ リーダーに同じ名前の対応する列がありません。」
メッセージでOKです。これを修正する方法を知っています (結果セット ID、名前、説明として返されます)。
この質問の背後にある私の考えは次のとおりです。
完全なエンティティ自体ではなく、エンティティの一部をロードしたいだけです。ここでは、データベースとの間の通信全体にストアド プロシージャのみを使用するという制限があります。
私の問題に対する解決策はありますか (複雑な型の作成、結果セット自体に対する LINQ を除く)? はいの場合、誰かが私を正しい方向に向けることができますか?
どうもありがとう、
ディミ