1

Employee dbml ファイルで、テーブルを SQL データベースから linq にマップしました。

[global::System.Runtime.Serialization.DataContractAttribute()]
public partial class tbEmployee
{

    private int _Employeeid;

    private string _EmployeeName;



    public tbEmployee()
    {
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Employeeid", DbType = "Int NOT NULL")]
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 0)]
    public int EmployeeID
    {
        get
        {
            return this._PeriodContextRefId;
        }
        set
        {
            if ((this._Employeeid != value))
            {
                this._Employeeid = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_EmployeeName", DbType = "NVarChar(2) NOT NULL", CanBeNull = false)]
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 1)]
    public string EmployeeName
    {
        get
        {
            return this._EmployeeName;
        }
        set
        {
            if ((this._EmployeeName != value))
            {
                this._EmployeeName = value;
            }
        }
    }

}

そしてサービスでは、タイプのオブジェクトを返すだけです

List<tbEmployee>

クライアントにサービス参照を追加すると、日付メンバーの注文情報がスキップされます。

シリアライゼーション/デシリアライゼーションにprotobuf-netを使用しているため、クライアント側でデシリアライズ中に問題が発生しています。

4

1 に答える 1

0

はい、それは迷惑です。これを修正するには 2 つのオプションがあります。最初の (そして最も簡単な) 方法は、クライアントとサーバー間でコントラクト アセンブリを共有する WCF の機能を使用することです。DTO レイヤーを共有できれば、作業は簡単になります。

2 つ目は、クライアントに追加のマーカーを追加して、手がかりを与えることです。クラスを介して、partialたとえばのコード ファイルでこれを行うことができます (生成されたファイルを編集しないでください)。

namespace YourNamespace {
    [ProtoContract(DataMemberOffset = 1)] /* shift all DataMember orders */
    public partial class tbEmployee {}
}

より明示的な代替手段は次のとおりです。

namespace YourNamespace {
    [ProtoPartialMember(1, "EmployeeID")]
    [ProtoPartialMember(2, "EmployeeName")]
    public partial class tbEmployee {}
}
于 2010-09-16T05:36:47.053 に答える