2010-05-24 69 views
0

我正在搞實體框架3.5 SP1,我試圖找到一個更乾淨的方式來做到以下。在ObjectContext中組織Eager查詢

我有一個EF模型,我添加了一些Eager Loaded實體,我希望它們全部駐留在上下文中的「Eager」屬性中。我們最初只是改變了實體集名稱,但是使用一個屬性似乎更加簡潔,並且保持實體集名稱的完整。

例子:

Context 
- EntityType 
- AnotherType 
- Eager (all of these would have .Includes to pull in all assoc. tables) 
    - EntityType 
    - AnotherType 

目前我使用的成分,但我覺得有做我想做一個簡單的方法。

namespace Entities{ 
public partial class TestObjectContext 
{ 

    EagerExtensions Eager { get;set;} 
    public TestObjectContext(){ 
    Eager = new EagerExtensions (this); 
    } 

} 

public partial class EagerExtensions 
{ 
    TestObjectContext context; 
    public EagerExtensions(TestObjectContext _context){ 
     context = _context; 
    } 
     public IQueryable<TestEntity> TestEntity 
     { 
      get 
      { 
       return context.TestEntity 
       .Include("TestEntityType") 
       .Include("Test.Attached.AttachedType") 
       .AsQueryable(); 
      } 
     } 
} 
} 



public class Tester{ 
    public void ShowHowIWantIt(){ 
    TestObjectContext context= new TestObjectContext(); 
    var query = from a in context.Eager.TestEntity select a; 

    } 

} 
+0

這不是很清楚你想要做什麼。你能否詳細說明你的總體建築目標? – 2010-05-24 13:23:53

+0

我在上面重寫了,希望它會有所幫助,我開始寫作了。作曲是唯一的出路。 – Nix 2010-05-24 13:39:35

回答

1

使用擴展方法提供渴望的上下文實例嗎?優點是單向依賴... TestObjectContext不依賴於EagerContext。

public namespace Entities.Eager 
{ 
public static class EagerExtensions 
{ 
    public static EagerContext AsEager(this TestObjectContext source) 
    { 
    return new EagerContext(source); 
    } 
} 

public class EagerContext 
{ 
    TestObjectContext _context; 
    public EagerContext(TestObjectContext context) 
    { 
    _context = context; 
    } 

    public IQueryable<TestEntity> TestEntity 
    { 
    get{ 
     return _context.TestEntity.Include(.... 
    } 
    } 
} 

} 

和測試代碼:

public class Tester 
{ 
    public void ShowHowIWantIt() 
    { 
    TestObjectContext context = new TestObjectContext(); 
    var query = from a in context.AsEager().TestEntity select a; 
    } 
}