我有一个用于添加项目的存储库,当我从数据库中检索所有项目时,除了最后添加的项目之外的所有项目都表示为“Castle.Proxies.ProjectProxy”。我想知道为什么会发生这种情况以及我可以采取哪些步骤来确保使用延迟加载加载所有内容。
这是代码示例:
var addedProject = await _projectRepository.AddAsync(projectToAdd);
await _projectRepository.SaveAsync();
var userProjects = await _projectRepository.GetAllAsync()
public class ProjectRepository : Repository<Project>, IProjectRepository
{
public ProjectRepository(TeamHubDbContext TeamHubDbContext)
: base(TeamHubDbContext) { }
}
public abstract class Repository<TEntity> : IRepository<TEntity>
where TEntity : class, new()
{
protected readonly TeamHubDbContext TeamHubDbContext;
protected Repository(TeamHubDbContext socialNetworkContext)
{
TeamHubDbContext = socialNetworkContext;
}
public virtual async Task<List<TEntity>> GetAllAsync()
{
return await TeamHubDbContext.Set<TEntity>().ToListAsync();
}
public async Task<TEntity> AddAsync(TEntity entity)
{
return (await TeamHubDbContext.AddAsync(entity)).Entity;
}
public virtual async Task SaveAsync()
{
await TeamHubDbContext.SaveChangesAsync();
}
}
public partial class TeamHubDbContext : DbContext
{
public DbSet<Project> Projects { get; set; }
public TeamHubDbContext(DbContextOptions options)
: base(options)
{
Database.EnsureCreated();
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}
}
我已采取必要的步骤,包括使用“UseLazyLoadingProxies()”并确保属性标记为“虚拟”以启用延迟加载。然而,尽管采取了这些措施,但预期的行为并未实现。
我明白了问题所在。一开始我很困惑,因为延迟加载在我的其他项目中有效,但在当前项目中无效。事实证明,在上一个项目中,我在创建依赖实体之前检查了所有父实体,因此所需的一切都已经在 DbContext 中了。