0

クライアント アプリケーションとして Entity Framework と Silverlight で RIA サービスを使用しています。部分クラスを介して EF エンティティのカスタム プロパティをいくつか取得しました。データベースには XML 型のフィールドがあり、Entity Framework に文字列としてマップされます。そして、部分クラスを使用して、この xml 文字列を実際のオブジェクトに逆シリアル化します。

これは、EF 構成エンティティの部分クラスです。

public partial class Configuration
{
    private ServiceCredentials _serviceCredentialsObject;

    [DataMember]
    public ServiceCredentials ServiceCredentialsObject
    {
        get
        {
            return this._serviceCredentialsObject
                   ?? (this._serviceCredentialsObject = this.DeserializeServiceCredentialsToObject());
        }

        set
        {
            this._serviceCredentialsObject = value;
            this.SerializeServiceCredentialsObject();
        }
    }

    public ServiceCredentials DeserializeServiceCredentialsToObject()
    {
        if (string.IsNullOrEmpty(this.ServiceCredentials))
        {
            return null;
        }

        var result = XmlSerializerHelper.Deserialize<ServiceCredentials>(this.ServiceCredentials);
        result.FileEncoding = result.FileEncoding ?? Encoding.UTF8;

        return result;
    }

    public void SerializeServiceCredentialsObject()
    {
        if (this.ServiceCredentialsObject == null)
        {
            this.ServiceCredentials = null;
            return;
        }

        this.ServiceCredentials = XmlSerializerHelper.Serialize(this.ServiceCredentialsObject);
    }

}

そして、これは私がデシリアライズしようとしているオブジェクトです:

[Serializable]
public class ServiceCredentials
{

    public NetworkCredential Credential { get; set; }

    public Encoding FileEncoding { get; set; }

    [XmlIgnore]
    public long HistoryID { get; set; }

    public string LoadFileStoragePath { get; set; }

    public string ManualLoadFilePath { get; set; }

    public bool NeedAuthorization { get; set; }

    [XmlIgnore]
    public string ProviderID { get; set; }

    public string SourceUrl { get; set; }

    public bool AutomaticTransferToProductive { get; set; }
}

生成されたコードを使用して Silverlight クライアント側で Configuration Entity を使用しようとすると、Configuration クラスに ServiceCredentialsObject がないという問題が見つかります。また、新しいものを作成しても DomainService.metadata.cs に追加されません。ServiceCredentialsObject を DomainService.metadata.cs に手動で追加すると、再構築後にクライアント側でアクセスできますが、単純なタイプのプロパティしか見つかりません。たとえば、HistoryID、SourceUrl、AutomaticTransferToProductive にアクセスできますが、生成されたプロパティはありません。

public NetworkCredential クレデンシャル { get; 設定; } パブリック エンコーディング FileEncoding { get; 設定; }

どうすればこれを修正できますか?

4

1 に答える 1

0

この問題を解決する唯一の方法を見つけました。解決策は、クライアント側のエンティティ フレームワークから xml フィールドを逆シリアル化することでした。Silverlight で生成されたコードの部分クラス Configuration を作成しました。それが最善の解決策かどうかはわかりませんが、うまくいきます。

于 2012-10-04T07:25:18.060 に答える