2

Entity Framework エンティティに基づいて、そのうちの 1 つの部分クラスを作成しました。ContentValue問題は、が返される前にコードを追加したいということです。しかし、それはうまくいきません -

[MetadataType(typeof(ToolTip_Meta))]
public partial class Tooltip
{
    ..some methods etc
}

public class ToolTip_Meta
{
    [Required]
    public string ContentValue
    {
        get
        {
            if (!string.IsNullOrEmpty(this.ContentValue))
                return this.ContentValue.Replace("\n", "<br/>").Replace("\r", "").Replace("\r", "").Replace("'", "\\'").Replace("\"", "&quot;");
            return this.ContentValue;
        }
        set { ContentValue = value; }
    }
}

ContentValueプロジェクトのどこかでプロパティ値を取得したい場合、変更されていない文字列を取得しますが、getアクセサー内には入りません。それを修正する方法?

4

2 に答える 2

3

これは実際には部分クラスやメタデータとは何の関係もないと思います。あなたの問題は実際には非常に単純です。

if (!string.IsNullOrEmpty(this.ContentValue))

にアクセスthis.ContentValueすると、ゲッターが呼び出され、ゲッターがアクセスされthis.ContentValue、ゲッターが呼び出されます... したがって、StackOverflowException または OutOfMemoryException を取得することになります。

これら 2 つのエラーのいずれかが発生していない場合は、質問を更新して、どのように機能しないかを説明してください。

于 2013-04-17T18:18:01.570 に答える
2

Entity Framework デザイナーで、生成されたプロパティのフィールド名を に変更し、ContentValueInternalパブリックではなく内部アクセスとしてマークします。これは、 のデータベース フィールドに引き続きマッピングできますContentValue

次に、手動でコード化された部分クラスでContentValue、質問で説明したロジックを持つが、ContentValueInternal内部でプロパティを使用して実際の値を格納するという新しいパブリック プロパティを作成します。

于 2013-04-17T18:24:12.270 に答える