C# Can';t访问存储库以获取visual studio MVC中的对象
在控制器中,我试图通过以下方式获得“分数”: findById在GradeRepository中声明: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;
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;
}