2011-10-01 111 views
0

許多像EF4.1一樣,但一直在這樣做!實體框架4.1堅持一個getter

我想結束這樣的類,其中EF處理這兩個屬性,他們都在數據庫中。

public class myClass 
{ 
    public int priority { get; set; } 
    public string status { get { return priority > 10 ? "Low" : "High" } } 
} 

1)當我從數據庫中生成模型時,我需要以某種方式將狀態計算注入到它的屬性中。
2)希望解決方案在我從數據庫重新生成模型時有效。

回答

0

你不能堅持這樣的財產。它是業務邏輯(計算屬性)。如果你想保存它,屬性必須有setter,因爲EF會在實體化從數據庫加載的實體時嘗試設置它,但是一旦暴露了setter,你的getter就沒有意義了,這個邏輯將不得不移到其他地方。

編輯:

的解決方法是換你Status邏輯爲輔助擴展方法:

public static IsHighPriority(this IQueryable<MyClass> query) 
{ 
    return query.Where(x => x.Priority > 10); 
} 

現在你可以使用它在查詢,如:

var query = from x in context.MyClasses.IsHighPriority() 
      where ... 
      select x; 
+0

嗯。我從業務層推進IQueryable的程度來看這個問題。我發現如果我在IQueryable中使用狀態屬性,那麼我得到一個錯誤,因爲該字段不在數據庫中,因此希望將其保存到數據庫中。如果不允許這樣做,那麼我經常會將這種邏輯看作是計算列,然而,在您的論點下,EF可以處理計算列,將業務邏輯放入數據庫會更糟糕。你留下一個誘人的「其他地方」,有什麼建議嗎? – DNeedy

+0

我添加了一個建議。 –