我有这样一个实体:延迟加载
public class Doctor : User
{
public Doctor(string userName, string firstName, string lastName,
string mobileNumber, string email, Sexes sex, Role myRole, DoctorExpertises expertise)
: base(userName, firstName, lastName, mobileNumber, email, sex, myRole)
{
this.Expertise = expertise;
this.Results = new List<Result>();
}
private Doctor()
{
this.Results = new List<Result>();
}
public void AddResult(Result result)
{
this.Results.Add(result);
}
public DoctorExpertises Expertise { get; private set; }
private ICollection<Result> results;
public virtual ICollection<Result> Results
{
get { return results; }
private set { results = value; }
}
}
,我有典型的资源库,如:
public abstract class RepositoryBase<T> where T : class
{
private DbContext dataContext;
protected readonly IDbSet<T> dbset;
protected RepositoryBase(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
dbset = DataContext.Set<T>();
}
protected IDatabaseFactory DatabaseFactory
{
get;
private set;
}
protected DbContext DataContext
{
get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
}
public virtual void Add(T entity)
{
dbset.Add(entity);
}
public virtual void Update(T entity)
{
dbset.Attach(entity);
dataContext.Entry(entity).State = EntityState.Modified;
}
public virtual void Delete(T entity)
{
dbset.Remove(entity);
}
public virtual void Delete(Expression<Func<T, bool>> where)
{
IEnumerable<T> objects = dbset.Where<T>(where).AsEnumerable();
foreach (T obj in objects)
dbset.Remove(obj);
}
public virtual T GetById(long id)
{
return dbset.Find(id);
}
public virtual T GetById(string id)
{
return dbset.Find(id);
}
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
public virtual IEnumerable<T> GetMany(Expression<Func<T, bool>> where)
{
return dbset.Where(where).ToList();
}
public T Get(Expression<Func<T, bool>> where)
{
return dbset.Where(where).FirstOrDefault<T>();
}
}
,我想偷懒负荷医生用下面的测试结果之一代码:
[TestMethod]
public void TestShouldLoadPropertyIfLazyLoaded()
{
// Act
Doctor doctor = this.userRepository.Get(u => u.UserName == "soroosh") as Doctor;
Result result = doctor.Results.FirstOrDefault();
// Asserts
Assert.IsNotNull(doctor);
Assert.IsNotNull(result);
}
不幸的是,它不能正常工作医生不为空,但结果为空。
如果我使用include
方法加载正确,它会正确加载,但我希望使用延迟加载。
我看过this question以及其他类似的问题,但其中没有一个是没用的,因为它们都使用急切的加载来解决问题。急于加载不适合我们,因为在我的main problem似乎急于加载是不可能的。
我该怎么办?
对不起,但我不明白你说的是什么。我再次说医生不是零。谢谢:) –
好吧,我误会了你 - 对不起;)我删除了评论;)也许你可以尝试以下内容: 结果结果= doctor.Results.ToList()。FirstOrDefault(); 顺便说一句你应该conssider分裂成两个单独的测试;) –
哦,以及userRepository从哪里来?你在关注数据库吗? –