基于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("\"", """);
return this.ContentValue;
}
set { ContentValue = value; }
}
}
当我的项目中的某个地方我想获得ContentValue
属性值时,我得到了未更改的字符串,我没有进入get
访问器。如何解决?
答案 0 :(得分:3)
我认为这实际上与部分类或元数据无关。你的问题其实很简单。
if (!string.IsNullOrEmpty(this.ContentValue))
当你访问this.ContentValue
时,它会调用getter,然后访问调用getter的this.ContentValue
...因此你要么得到一个StackOverflowException或者一个OutOfMemoryException。
如果您没有遇到这两个错误中的一个,请更新您的问题以解释 它不起作用。
答案 1 :(得分:2)
在Entity Framework设计器中,将生成的属性的字段名称更改为ContentValueInternal
,并将其标记为具有内部访问权限而不是公共访问权限。这仍然可以映射到ContentValue
的数据库字段。
然后,在手工编写的分部类中,创建一个名为ContentValue
的新公共属性,它具有您在问题中描述的逻辑,但在内部使用ContentValueInternal
属性来存储实际值