2013-10-03 28 views
0

我正在使用的數據庫(我無法控制此操作)在似乎正在搞亂我的代碼的列中有空值。我想在我的項目的模型部分處理這個問題,因爲它似乎是合適的地方。創建客戶吸氣器聽起來對我來說是個好主意。替換模型(EF)中的數據庫中的空值

public string _DesignLink { get; set; } 
public virtual string DesignLink { 
    get { return _DesignLink ?? ""; } 
} 

映射

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
... 
modelBuilder.Entity<ToolPlan>().Property(t => t._DesignLink).HasColumnName("DesignLink"); 
... 
} 

邏輯工作在我的腦海裏。創建一個虛擬屬性以使getter工作,然後將該屬性重新映射到實際列。給我的錯誤是:

One or more validation errors were detected during model generation: 

System.Data.Entity.Edm.EdmProperty: Name: The specified name is not allowed: '_DesignLink'. 

第一次訪問數據庫時發生此錯誤。我怎樣才能讓這個列中的所有空值顯示在我的項目中的空白處?

回答

1

你有點困難。自定義的getter是個不錯的計劃,但你只需要物業本身:

private string designLink; 
public string DesignLink 
{ 
    get { return designLink ?? string.Empty; } 
    set { designLink = value; } 
} 

這應該是你所需要的。

+0

除了節能這一實體將不再導致一個數據庫中的'null'值,可能需要進行適當的功能,在其他地方。我更喜歡包裝的附件,因爲它保留了原有的功能。 – Moho

+0

如果OP需要維護數據庫空值,他可以簡單地將該屬性添加到視圖模型而不是模型本身。 –

+0

我想我像往常一樣反覆解決了這個問題。關於上面的討論,我只是從這張表中讀出來的,所以上面提到的觀點對我來說是沒有意義的。好點 – Jeff

0

你只需要一點點的裝飾與NotMapppedAttributeColumnAttribute

[Column("DesignLink")] // want this property to map to DB column 
public string _DesignLink { get; set; } 

public string DesignLink { 
    get { return _DesignLink ?? ""; } 
} 
+0

如果屬性是隻讀的,那麼你不需要'NotMapped'屬性,但是我們可能在這裏需要一個setter,所以我建議添加'set {_DesignLink = value ==「」? null:value; }' – Colin

+0

ha好點,不需要'NotMapped',但'Column'屬性可以解決問題 – Moho