1

我有記錄標記爲「IsArchived」。我正在尋找一種方便的方法來從當前的MVC3/EF3 Web應用程序中排除這些記錄。有沒有一種方法來添加一個過濾器到實體框架圖層來排除「IsArchived」記錄?

有沒有辦法給EF層添加某種「IsArchived」過濾器。在我的情況下,我有一個單獨的Model項目,其中表/視圖表示爲POCO實體,以及包含在CSDL和SSDL文件中的映射。

非常感謝您的任何幫助。

編輯:

我使用「的ObjectContext」,而不是「的DbContext」,主要是因爲我使用的數據建模工具。該工具創建上下文和POCO文件。

我想知道我是否可以編輯該上下文文件如下所示:

public ObjectSet<StdOrg> StdOrg 
    { 
     get 
     { 
      if ((_StdOrg == null)) 
      { 
       _StdOrg = base.CreateObjectSet<StdOrg>("StdOrg"); 
       // new line below. Got cast error tween both sides. 
       _StdOrg = (ObjectSet<StdOrg>) _StdOrg.Where(r => r.IsArchived == false); 
      } 
      return _StdOrg; 
     } 
    } 
+1

你有某種形式的抽象(如'UnitOfWork'&'Repository')在你的' DbContext'和'DbSet's? – qujck

+0

嗨,謝謝你的回覆。不,我不知道,我剛剛閱讀了一些關於這個主題的有趣觀點。我認爲Repository是一個毫不費力的推薦路線,但它似乎不是。現在有一個強大的思想流派,現代的ORM不需要另一個抽象層,所以我的權宜之計可能並不是一個壞主意。我剛剛發現我使用「ObjectContext」而不是「DBContext」,並試圖將過濾器放入此上下文文件中。參見編輯。 – SamJolly

+1

這裏是我對'Repository'模式的想法 - 在你的情況下,這將意味着你可以輕鬆地添加過濾http://stackoverflow.com/questions/14110890/not-using-repository-pattern-use-the-orm-as-是 - ef/17473500#17473500 – qujck

回答

2

看看這個http://www.matthidinger.com/archive/2012/01/25/a-smarter-infrastructure-automatically-filtering-an-ef-4-1-dbset.aspx

基本上過濾DBSet實現的例子基本上顯示被用於軟刪除。我們在應用程序中沒有問題地使用它。

但是我們使用的DbContext所以不知道如何做到這一點與對象上下文工作或它如何適應

+0

我已經將它標記爲答案,因爲它是一個很好的終點,但是對於ObjectContext來說不太正確。我最終做的是在模型中創建一個「映射條件」,它效果很好。但是,條件屬性不能用作屬性,因此對此列的更新需要原始DDL。我相信NHibernate在過濾方面比EF更先進。謝謝。 – SamJolly

相關問題