2

基于 Entity Framework 实体,我为其中一个创建了部分类。问题是,我想在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时,它调用那个getter,然后访问this.ContentValue,它调用getter......因此你将得到一个StackOverflowException或一个OutOfMemoryException。

如果您没有遇到这两个错误之一,请更新您的问题以解释它是如何不起作用的。

于 2013-04-17T18:18:01.570 回答
2

在实体框架设计器中,将生成的属性的字段名称更改为ContentValueInternal,并将其标记为具有内部访问权限而不是公共的。这仍然可以映射到ContentValue.

然后,在您手动编码的部分类中,创建一个名为的新公共属性ContentValue,该属性具有您在问题中描述的逻辑,但在ContentValueInternal内部使用该属性来存储实际值。

于 2013-04-17T18:24:12.270 回答