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 T开发者_开发知识库estObjectContext
{
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;
}
}
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;
}
}
精彩评论