2013-04-17 56 views
2

,我爲其中的一個創建了部分類。問題是,我想在返回ContentValue之前添加一些代碼。但是,這是行不通的 -基於實體框架實體的C#部分類和獲取訪問器

[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

您可以創建並使用一個使用ContentValue作爲支持者的新屬性嗎? – Khan

+0

您是否在ContentValue的get屬性中調用了ContentValue的屬性?這應該d =不能肯定的工作 –

+0

我可以,但我想確保每次程序員獲取ContentValue屬性值時,他都會得到已更改的字符串 – Tony

回答

3

我不認爲這實際上與部分類或元數據有關。你的問題其實很簡單。

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

當您訪問this.ContentValue,它調用getter方法,然後訪問this.ContentValue,這就要求吸氣......這樣你會要麼得到一個StackOverflowException或一個OutOfMemoryException。

如果您沒有遇到這兩個錯誤之一,請更新您的問題以解釋如何它不起作用。

2

在實體框架設計器中,將生成的屬性的字段名稱更改爲ContentValueInternal,並將其標記爲具有內部訪問權限而非公共權限。這仍然可以映射到ContentValue的數據庫字段。

然後,在您的手動編碼的部分類中,創建一個名爲ContentValue的新公共屬性,其中具有您在問題中描述的邏輯,但在內部使用ContentValueInternal屬性存儲實際值。

+0

中的ContentValue屬性做一些技巧聽起來不錯,但問題是每次更新EF模型時,每個程序員都必須記住將該屬性更改爲ContentValueInternal。但是有人可以忘記這樣做 – Tony

+0

如果你只是在設計器中做「從數據庫更新模型」,它應該記住映射,所以你不應該一直重置它們。如果您使用的是源代碼管理,並且您將源代碼存儲在edmx中,那麼每個程序員都應該使用相同的映射,因此不需要單獨更改它。如果由於某種原因上述操作不成立,並且它被重置並且有人忘記更改它,那麼編譯器將會抱怨,因爲您將有一個部分類引用一個不存在的字段。所以這應該足以提醒我們修復它。 –