2013-12-16 3 views
0

Я знаю, что на эту тему было много вопросов. Тем не менее, я действительно смущен, почему я получаю это исключение в этом случае.ObjectDataSource общий метод выбора без параметров

Исключение

ObjectDataSource 'investmentDataSource' could not find a non-generic method 'GetAll' that has no parameters 

Дело среда - .net 3.5, осина, 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

Было бы предпочтено поставить другой дополнительный класс адаптера между вашим репозиторием и вашим объектом ObjectDataSource.

Будет легче управлять всеми возможными комбинациями параметров с таким адаптером, чем пытаться сделать круг из квадрата (читайте: создание вашего общего хранилища непосредственно в качестве поставщика данных источника данных объекта).

+0

К концу дня я думал то же самое, молча надеясь, что будет более простое решение. Чтобы облегчить мою жизнь, я поместил этот метод в пользовательский элемент управления или в репозиторий. Первое - более вероятно. – Santhos

0

Так что я создал метод на пользовательский элемент управления, который должен работать в качестве адаптера:

public System.Collections.IEnumerable GetInvestments() 
{ 
    return this.InvestmentRepository.GetAll(); 
} 

И установить TypeName в ObjectDataSource в методе Page_Load пользовательского элемента управления, как это:

this.investmentDataSource.TypeName = this.GetType().AssemblyQualifiedName; 

Кажется, что это работает. Тем не менее, я недавно узнал, что InsertMethod объекта ObjectDataSource прослушивается, когда вы установили DataObjectTypeName, поэтому удобство использования ObjectDataSource весьма сомнительно.

Смежные вопросы