2011-11-17 67 views
0

我有一個實體,我只需要返回給定字段值大於零的記錄。我已經看到了edmx中的條件映射的例子,這看起來像我所需要的。但是,我的項目首先在EF 4.1代碼中。 有沒有辦法使用代碼優先的方法做到這一點?首次使用代碼的實體框架條件映射?

回答

5

我不認爲有一個內置的方法來實現這一點,但是你可以在你的DbContext中應用過濾的屬性,最初這將是隻讀的,但我沒有看到你不應該能夠創建你的原因自己DbSet實施反射回另一DbSet(ProxyDbSet)

只讀例如:

class MyDbContext : DbContext 
{ 
    public IDbSet<User> Users { get; set; } 

    public IQueryable<User> Admins 
    { 
     get 
     { 
      return from user in users 
        where user.Role == "admin" 
        select user; 
     } 
    } 
} 
+0

謝謝@Polity。如果我理解正確,這將導致EF返回我的整個記錄​​集,然後分配linq過濾的設置,在你的例子中,Admins IQuaryable屬性。我希望不要這樣做,因爲整個系列會很大。但是,從我所知道的情況來看,這可能是最好的解決方案。非常感謝您的快速回復! – RockyMountainHigh

+2

@RockyMountainHigh - 沒有它實際上,請注意,DbSet實現IQueryable以及方法本身返回IQueryable。這意味着調用管理員不會返回任何內容,而只是查詢的定義。只要您開始對管理員的結果進行foreach,就會生成一個SQL查詢,其中包含用戶角色的where過濾器。因此,這與條件映射一樣有效 – Polity

+0

完美!謝謝!今天學點新東西?檢查! – RockyMountainHigh