2013-06-30 85 views
0

我以下列方式訪問我的類的靜態列表:訪問數據庫上下文中的靜態屬性

public class Foo 
{ 
    public static List<long> myList = new List<long>() { 1,2,3 } 
} 

using(EfEntities myDbContext = new EfEntities()) 
{ 
    var bar = Foo.myList; 
} 

它的工作原理,但要使它更多的數據驅動的我會喜歡做這樣的事情,同時仍保持性能靜若可能的(僞代​​碼):

public class Foo 
{ 
    public static List<long> myList 
    { 
     get 
     { 
      return dbContext.SomeTable.Where(x => x == 1).ToList(); 
     } 
    } 
} 

我想利用的,並從數據庫傳遞數據而不是硬編碼列表。

有什麼辦法可以在屬性中使用myDbContext實例,而不需要實例化Foo

回答

1

把它改爲方法怎麼樣?

public class Foo 
{ 
    public static List<long> GetList(EfEntities dbContext) 
    { 
     return dbContext.SomeTable.Where(x => x == 1).ToList(); 
    } 
} 

...並使用它;

using(EfEntities myDbContext = new EfEntities()) 
{ 
    var bar = Foo.GetList(myDbContext); 
} 
+0

謝謝,我想這是解決它的最好方法。但讓我們說,我有10種方法;有什麼方法可以在不傳遞給所有10種方法的情況下使用上下文? – Johan

+1

@Johan你可以在'HttpContext.Items'中註冊上下文,並從屬性裏面獲取它,但如果這是你需要的,那麼以一種好的方式做這件事可能是一個新問題的材料。我可能會創建一個可處理的類來爲你註冊/取消註冊/處理,並且一個靜態方法從'HttpContext'獲得當前的'EfEntities'上下文,如果這有任何意義的話:) –

相關問題