我知道这个话题有很多问题。但是,我真的很困惑为什么在这种情况下我得到这个例外。
例外
ObjectDataSource 'investmentDataSource' could not find a non-generic method 'GetAll' that has no parameters
案例 环境 - .net 3.5,asp,SharePoint 2010(这没关系)
存储库对象继承自通用存储库对象,如下所示:
public class InvestmentRepository : Repository<Investment, EntityContext>, IInvestmentRepository
{
// ...
}
通用存储库如下所示:
public abstract class Repository<TEntity, TContext> : IRepository<TEntity>
where TEntity : EntityObject, new()
where TContext : ObjectContext, new()
{
public IQueryable<TEntity> GetAll()
{
// returns all entities from context
}
}
我认为在编译期间,会在InvestmentRepository上创建一个如下所示的方法:
public IQueryable<Investment> GetAll()
所以我想当我创建一个这样的ObjectDataSource:
<asp:ObjectDataSource
ID="investmentDataSource"
runat="server"
OnObjectCreating="DataSourceObjectCreating"
TypeName="Model.InvestmentRepository"
SelectMethod="GetAll">
</asp:ObjectDataSource>
......应该有用。但是,它不起作用。我正在寻找任何建议。感谢
答案 0 :(得分:0)
建议在您的存储库和ObjectDataSource之间放置另一个辅助适配器类。
使用此类适配器控制所有可能的参数组合比尝试从正方形制作圆圈要容易得多(读取:使您的通用存储库直接作为对象数据源的数据提供者)。
答案 1 :(得分:0)
所以我在用户控件上创建了一个应该用作适配器的方法:
public System.Collections.IEnumerable GetInvestments()
{
return this.InvestmentRepository.GetAll();
}
并在用户控件的Page_Load方法中设置ObjectDataSource的TypeName,如下所示:
this.investmentDataSource.TypeName = this.GetType().AssemblyQualifiedName;
似乎工作正常。但是,我最近发现,当你设置了DataObjectTypeName时,ObjectDataSource的InsertMethod会被窃听,因此ObjectDataSource的可用性非常值得怀疑。