C# Can';t访问存储库以获取visual studio MVC中的对象

C# Can';t访问存储库以获取visual studio MVC中的对象,c#,visual-studio,C#,Visual Studio,在控制器中,我试图通过以下方式获得“分数”: findById在GradeRepository中声明: public class GradeRepository : IGradeRepository { private ProjectContext context; private DbSet<Grade> grades; public GradeRepository(ProjectContext context) { this.context = context;

在控制器中,我试图通过以下方式获得“分数”:

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();
}


}
公共类存储库:IGradeRepository
{
私人项目背景;
私人DbSet职系;
公共存储库(ProjectContext上下文)
{
this.context=上下文;
等级=上下文。等级;
}
公共可查询FindAll()
{
返回grades.OrderBy(g=>g.name);
}
公共等级FindById(内部等级ID)
{
返回等级。包括(l=>l.determinetableprop).FirstOrDefault(g=>g.GradeInt==gradeId);
}
清除公共空隙(坡度)
{
等级。移除(等级);
}
公共void SaveChanges()
{
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();
        }
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().To().InRequestScope();
kernel.Bind().To().InRequestScope();
kernel.Bind().ToSelf().InSingletonScope();
}
这里可能有什么问题? 我使用的存储库与我使用的另一个存储库完全相同。

Answer 检查机器,找出哪里出了问题

内部异常的重要性 这就是为什么需要查看
InnerException
。通过调用某个方法,可能是工厂方法。该方法抛出了一个异常,该异常被隐藏在
targetingException
InnerException
属性中,因为反射调用的方法异常就是这样发生的。他们躲起来了。因此,您需要检查
InnerException
,以找出真正的错误

对targetingException的处理相当好

这里可能有什么问题? 通过查看代码,可能是称为
GetConstructorForType
factory方法的反射,如果
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;
}

运行
Grade g=gradeRepository.FindById(1)时会发生什么在你的代码中?它抛出一个异常(被捕获并重定向到另一个页面)。异常类型是什么?消息?SqlException。EntityFramework.SqlServer.dll中发生类型为“System.Reflection.TargetInvocationException”的异常,但未在用户代码中处理其他信息:调用的目标导致了异常。这
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;
}