代码之家  ›  专栏  ›  技术社区  ›  Nix

在ObjectContext中组织热切的查询

  •  0
  • Nix  · 技术社区  · 15 年前

    我正在处理EntityFramework3.5SP1,我正试图找到一种更干净的方法来完成下面的工作。

    我有一个EF模型,我正在添加一些渴望加载的实体,我希望它们都驻留在上下文中的“渴望”属性中。我们最初只是更改实体集名称,但是仅仅使用一个属性并保持实体集名称的tact看起来要干净得多。

    例子:

    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;
    
      }
    
    }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Amy B    15 年前

    是否使用扩展方法提供渴望上下文实例?优点是使依赖性单向…TestObjectContext不依赖于HoggeContext。

    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;
      }   
    }