views:

73

answers:

1

I am messing around with Entity Framework 3.5 SP1 and I am trying to find a cleaner way to do the below.

I have an EF model and I am adding some Eager Loaded entities and i want them all to reside in the "Eager" property in the context. We originally were just changing the entity set name, but it seems a lot cleaner to just use a property, and keep the entity set name in tact.

Example:

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

Currently I am using composition but I feel like there is an easier way to do what I want.

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  A: 

Use an extension method to provide the eager context instance? The advantage is to make the dependency one-way... TestObjectContext does not depend on 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(....
    }
  }
}

}

and test code:

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