C#partial class和get accessor

时间:2013-04-17 18:09:43

标签: c# partial-classes

基于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访问器。如何解决?

2 个答案:

答案 0 :(得分:3)

我认为这实际上与部分类或元数据无关。你的问题其实很简单。

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

当你访问this.ContentValue时,它会调用getter,然后访问调用getter的this.ContentValue ...因此你要么得到一个StackOverflowException或者一个OutOfMemoryException。

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

答案 1 :(得分:2)

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

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