2015-03-05 4 views
1

В контроллере я пытаюсь получить «грейд», используя:не удается получить доступ к хранилищу, чтобы получить объект в визуальной студии MVC

Grade g = gradeRepository.FindById(1); 

findById объявлен в GradeRepository:

public class GradeRepository : IGradeRepository 
{ 
private ProjectContext context; 
private DbSet<Grade> grades; 

public GradeRepository(ProjectContext context) 
{ 
    this.context = context; 
    grades = context.Grades; 
} 

public IQueryable<Grade> FindAll() 
{ 
    return grades.OrderBy(g => g.name); 
} 

public Grade FindById(int gradeId) 
{ 
    return grades.Include(l => l.DeterminateTableProp).FirstOrDefault(g => g.GradeInt == gradeId); 
} 

public void Remove(Grade grade) 
{ 
    grades.Remove(grade); 
} 

public void SaveChanges() 
{ 
    context.SaveChanges(); 
} 


} 

услуги зарегистрированы правильно в файле nijectwebcommon:

private static void RegisterServices(IKernel kernel) 
     { 
      kernel.Bind<IContinentRepository>().To<ContinentRepository>().InRequestScope(); 
      kernel.Bind<IGradeRepository>().To<GradeRepository>().InRequestScope(); 
      kernel.Bind<ProjectContext>().ToSelf().InSingletonScope(); 
     } 

Что этот вопрос может быть здесь? Я делаю то же самое, что и другой репозиторий, который я использую.

+0

Что происходит, когда вы запускаете 'Grade g = gradeRepository.FindById (1);' в вашем коде? –

+0

Он выдает исключение (которое перехватывается и перенаправляется на другую страницу). –

+0

Каков тип исключения? Сообщение? –

ответ

0

Ответ

Осмотрите InnerException property of the TargetInvocationException, чтобы выяснить, что пошло не так.

Важность InnerException

Вот почему вы должны смотреть на InnerException. Некоторый метод, возможно, фабричный метод, был вызван через reflection. Этот метод породил исключение, и это исключение скрылось внутри свойства InnerExceptionTargetInvocationException, потому что это то, что происходит с исключениями, вызванными отражением. Они скрываются. Итак, вам нужно проверить InnerException, чтобы узнать, что действительно пошло не так.

The intro and remarks on MSDN tell the storyTargetInvocationException довольно хорошо.

В чем может быть проблема?

От взгляда на ваш код это может быть отражение, вызванное фабричным методом GetConstructorForType, которое генерирует исключение, если Grade не имеет конструктора по умолчанию.

internal static ConstructorInfo GetConstructorForType(Type type) 
{ 
    System.Diagnostics.Debug.Assert(type != null); 
    ConstructorInfo ci = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance, null, System.Type.EmptyTypes, null); 
     if (null == ci) 
     { 
      ThrowConstructorNoParameterless(type); 
     } 
    return ci; 
}