5

Entity Framework を使用して SQL Server でストアド プロシージャを呼び出し、結果セットをブラウザーに返す WCF サービスを作成したいと考えています。

EF の関数インポートを使用してストアド プロシージャをインポートし、複合型を作成しました。

EF からの複合型をシリアル化して、安らかに返すことができないようです。これを機能させる唯一の方法は、具象クラスを作成し、EF から返された複合型から構築することです。これは機能しますが、30 個のストアド プロシージャがある場合、30 個の具象クラスを作成する必要があり、多少面倒です。

これを行うより良い方法はありますか?

WCF 契約:

[ServiceContract]
public interface IService1
{
    [OperationContract,WebGet,XmlSerializerFormat]
    List<People> usp_GetPeople();    
}

プロシージャごとに具象クラスを作成する必要があります。

public class People
{
    public int person_id;
    public string last_name;
    public string first_name;
    public string street_addr;
    public string state_code;
    public string postal_code;

    public People(int person_id, string last_name, string first_name, string street_addr, string state_code, string postal_code)
    {
        this.person_id = person_id;
        this.last_name = last_name;
        this.street_addr = street_addr;
        this.state_code = state_code;
        this.postal_code = postal_code;
    }

    public People() { }
}

WCF サービス:

public class Service1 : IService1
{
/// <summary>
/// Call stored proc and return resultset.
/// </summary>
/// <returns>List of resultset as concrete class People.</returns>
public List<People> usp_GetPeople()
{
    try
    {
        using (var db = new demoEntities())
        {
            var res = db.usp_GetPeople();

            List<People> lst = new List<People>();

            foreach (usp_GetPeople_Result r in res)
            {
                People p = new People(r.person_id, r.last_name, r.first_name, r.street_addr, r.state_code, r.postal_code);
                lst.Add(p);
            }

            return lst;
        }
    }
    catch (Exception e)
    {
        Utility.Log("Error in usp_GetPeople. " + e.ToString());
        return null;
    }
}
4

1 に答える 1

1

答えは、EF 複合型のリストを返すことです。

 public List<usp_GetPeople_Result> usp_GetPeople2()
    {
        using (var db = new demoEntities())
        {
            return db.usp_GetPeople().ToList();
        }
    }

これは機能しません:

 public ObjectResult<usp_GetPeople_Result> usp_GetPeople3()
    {
        using (var db = new demoEntities())
        {
            return db.usp_GetPeople();
        }
    }
于 2012-10-22T17:11:30.590 に答える