2010-05-24 66 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; 
    } 
}