- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经尝试解决这个问题一段时间了,但我已经走到了死胡同,所以也许你们可以提供帮助。请注意,这与此问题无关。
我在 MVC3 中使用 Entity-Code First。我一定对我的一个对象做了一些狡猾的事情,因为当它第一次尝试创建数据库并从我的 Seed
函数填充它时,会发生此错误(Seed
函数从未实际调用过,但数据库和表被创建了)。
系统深处抛出异常:
> mscorlib.dll!System.RuntimeType.CreateInstanceSlow(bool publicOnly, bool skipCheckThis, bool fillCache = true) + 0x63 bytes
mscorlib.dll!System.Activator.CreateInstance(System.Type type, bool nonPublic) + 0x46 bytes
System.Web.Mvc.dll!System.Web.Mvc.DependencyResolver.DefaultDependencyResolver.GetService(System.Type serviceType) + 0x25 bytes
System.Web.Mvc.dll!System.Web.Mvc.DependencyResolverExtensions.GetService<System.Web.Mvc.IControllerFactory>(System.Web.Mvc.IDependencyResolver resolver) + 0x3d bytes
System.Web.Mvc.dll!System.Web.Mvc.SingleServiceResolver<System.Web.Mvc.IControllerFactory>.Current.get() + 0x7e bytes
System.Web.Mvc.dll!System.Web.Mvc.MvcRouteHandler.GetSessionStateBehavior(System.Web.Routing.RequestContext requestContext = {System.Web.Routing.RequestContext}) + 0x72 bytes
System.Web.Mvc.dll!System.Web.Mvc.MvcRouteHandler.GetHttpHandler(System.Web.Routing.RequestContext requestContext = {System.Web.Routing.RequestContext}) + 0x2a bytes
System.Web.Mvc.dll!System.Web.Mvc.MvcRouteHandler.System.Web.Routing.IRouteHandler.GetHttpHandler(System.Web.Routing.RequestContext requestContext) + 0xb bytes
System.Web.dll!System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(System.Web.HttpContextBase context = {System.Web.HttpContextWrapper}) + 0x108 bytes
System.Web.dll!System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(object sender, System.EventArgs e) + 0x57 bytes
System.Web.dll!System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x95 bytes
System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step = {System.Web.HttpApplication.SyncEventExecutionStep}, ref bool completedSynchronously = true) + 0x4c bytes
System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception error) + 0x13e bytes
System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object extraData) + 0xad bytes
System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr = {Microsoft.VisualStudio.WebHost.Request}) + 0x1a2 bytes
System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr) + 0x7d bytes
System.Web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest wr) + 0x47 bytes
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Request.Process() + 0x17b bytes
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Microsoft.VisualStudio.WebHost.Connection conn = {System.Runtime.Remoting.Proxies.__TransparentProxy}) + 0x6c bytes
[Appdomain Transition]
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(object acceptedSocket) + 0x83 bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state) + 0x2d bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x5a bytes
mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x147 bytes
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() + 0x2d bytes
[Native to Managed Transition]
目前我只有一个对象。请注意,正如我之前所说,它是在数据库中创建的:
// class Category
public class Category
{
[Key]
public int CategoryID { get; set; }
[Required]
[StringLength(64)]
public string Name { get; set; }
public int? ParentCategoryID { get; set; }
[ForeignKey("ParentCategoryID")]
public Category ParentCategory { get; set; }
[Required]
public int ListOrder { get; set; }
// left/right
public int TreeLeft { get; set; }
public int TreeRight { get; set; }
} // eo class Category
这是我的 DbContext
派生类:
// class ModelContext
public class ModelContext : DbContext
{
public DbSet<Models.CMS.Category> ContentCategories { get; set; }
// property to get the object context
public ObjectContext ObjectContext
{
get
{
return ((IObjectContextAdapter)this).ObjectContext;
}
}
// OnModelCreating
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
} // eo OnModelCreating
} // eo class ModelContext
那里没有太多进展。最后,我的初始化程序。 Seed
函数从未被调用:
// class ModelInitializer
public class ModelInitializer : DropCreateDatabaseIfModelChanges<ModelContext>
{
// seed
protected override void Seed(ModelContext context)
{
var catRepo = Models.CMS.CategoryRepository.Instance;
// Root category node
context.ContentCategories.Add(catRepo.CreateRoot());
// Test data
Category home = catRepo.Add(new Category { Name = "Home", ListOrder = 10 });
Category news = catRepo.Add(new Category { Name = "News", ListOrder = 20 });
catRepo.Add(new Category { Name = "Current News", ListOrder = 10 }, news);
catRepo.Add(new Category { Name = "Older News", ListOrder = 20 }, news);
} // eo Seed
} // eo class ModelInitializer
您可能需要或不需要更多信息,我会明确提供。我不知道从哪里开始看。该错误甚至可能与我的模型无关,但无论如何。我注意到它发生在 MvcRouteHandler 中,我在这里没有做任何特别的事情,如果我忽略异常,我最终会进入 HomeController 的操作处理程序。我在这里收到一个错误,因为数据库没有播种(因为从未调用过 Seed
)。
哦,如果有帮助的话,global.asax.cs
中的初始化程序:
protected void Application_Start()
{
DbDatabase.SetInitializer<ModelContext>(new ModelInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
如有任何帮助或指点,我们将不胜感激!
编辑: Controller 看起来像这样:
public ActionResult Index()
{
Models.CMS.CategoryRepository repo = Models.CMS.CategoryRepository.Instance;
List<Models.CMS.Category> cats = repo.GetAll();
return View();
}
但是,错误发生在它到达此处理程序之前。该 GetAll()
调用中的某些代码随后会出错,因为数据库未填充(从未调用 Initializer)。
最佳答案
我下载了项目。首先,为了在没有任何模型问题的情况下重新开始,我将 ModelInitializer
设置为从 DropCreateDatabaseAlways
继承,因为我不希望每次调试时数据库中都有任何陈旧数据。
当我运行该应用程序时,我在 CategoryRepository
的 Add()
方法中遇到一个空异常。我认为您可能对存储库模式有误解。目前,您使用的是静态存储库,IMO 不适合这样做。您还在几个地方创建了一个新的模型上下文,您应该通过将其作为参数传递到存储库来避免这种情况。理想情况下,类别存储库的界面应如下所示:
public interface ICategoryRepository
{
void Add(Category category);
void Remove(Category category);
List<Category> GetAll(int parentId = 0);
Category GetRoot();
Category Get(int id);
}
然后在您的存储库实现中将是这样的:
public class CategoryRepository : ICategoryRepository
{
private readonly ModelContext context;
// Here we pass in the context so that it can be used by methods.
public CategoryRepository(ModelContext context)
{
this.context = context;
}
#region ICategoryRepository Members
public void Add(Category category, Category parent = null)
{
if (parent == null)
{
parent = this.GetRoot();
}
// Snipped the stuff here.
// Finally add to the current context.
this.context.ContentCategories.Add(category);
}
// And all other methods...
}
我对项目进行了一些重大更改,因此我希望它们对存储库模式有意义。您可以找到 updated project here .在我改变这个之后,我得到了一个关于关系的异常(exception) - 所以我认为你最好的办法是解释你如何尝试建模类别(某种形式的树结构......)我可以从那里帮助你。另外,一定要清理你的项目并确保数据库是空的。干杯!
关于c# - ASP.Net MVC - "Cannot Create Instance of an Interface",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921006/
编写一个仅用于集中其他接口(interface)的接口(interface)是好的做法还是坏的做法? interface InterfaceA : InterfaceB, InterfaceC { }
有没有一种方法可以确定具体类型从任意接口(interface)列表?我知道类型转换,但我想知道所有满意的接口(interface)。 例如,给定: type Mover interface { Mo
我正在尝试制作斐波那契堆。 (在我正在上的算法课中多次提到它们,我想检查一下。)我希望堆使用任何类型的节点,所以我定义了一个 Node 接口(interface): package node type
这是我的代码: type IA interface { FB() IB } type IB interface { Bar() string } type A struct {
示例 A: // pseudo code interface IFoo { void bar(); } class FooPlatformA : IFoo { void bar() {
合并它编译的 leppies 反馈 - 但 IMO 有一些缺点,我希望编译器强制每个子类定义它们自己的 Uri 属性。现在的代码: [] type UriUserControl() = inh
我正在构建一个项目,该项目从用户那里获取一个术语,然后执行谷歌搜索并返回一个 json 格式的标题列表。 我正在使用 serpwow API 来执行谷歌搜索并试图解析响应。 但是我收到的错误是: pa
我只想在其他接口(interface)中实现某些接口(interface),我不希望它们能够被类直接继承。 提前致谢! 最佳答案 您不能在 C# 中执行此操作 - 任何类都可以实现它有权访问的任何接口
我是 Go 的新手,还有一些我还没有掌握的技巧 例如,我有一个可以这样调用的函数: myVar.InitOperation("foo",Operator.EQUAL,"bar") myVar.Init
我有一个通用接口(interface)来描述对输出流的访问,如下所示: interface IOutput { function writeInteger(aValue:Int):Void;
我正在做一个项目,我想通过某种接口(interface)(最好是 USB)将光电探测器电路安装到计算机上。但是,由于我是新手,所以我不知道应该朝哪个方向处理这个问题。假设我有一个带有 USB 连接的光
背景 我正在尝试创建一个简单的应用程序,以真正理解DDD + TDD + etc的整个堆栈。我的目标是在运行时动态注入DAL存储库类。这让我 域和应用程序服务层可测试。我打算用“穷人的DI”来完成 现
在 Java 中,接口(interface)扩展接口(interface)是完全合法的。 UML 中的这种关系看起来像“扩展”关系(实线、闭合、未填充的箭头)还是“实现”关系(虚线、闭合、未填充的箭头
我想创建一个具有相等和比较函数默认实现的接口(interface)。 如果我从类型 IKeyable 中删除所有内容除了Key成员,只要我不添加默认实现,它就是一个有效的接口(interface)。从
COM 中的双接口(interface)是能够通过 DispInterface 或 VTable 方法访问的接口(interface)。 现在有人可以告诉我这两种方法之间到底有什么区别吗? 我认为 V
我有一个类方法,它返回一个可以迭代的员工列表。返回列表的最佳方式是什么?通常我只返回一个 ArrayList。然而,据我了解,界面更适合这种类型的操作。哪个是最好使用的界面?另外,为什么返回接口(in
我想从包装类外部实例化一个内部非静态接口(interface)。 这可能吗? 考虑以下代码: shared class AOuterClass() { Integer val = 3; shared
我为一个类编写了一个接口(interface),如下所示: public interface IGenericMultipleRepository { Lazy> addresses { ge
我是 UML 的初学者,现在我正在创建一个序列图,问题是我想根据用户输入实现 DAO 接口(interface)。如何在时序图中正确绘制以实现接口(interface)。 最佳答案 您不会在 SD 上
要使用 jsr 303 验证创建有条件验证的组,请将接口(interface)类传递给注释,如下所示: @NotEmpty (groups={UpdateValue.class}) 我有很多不同的接口
我是一名优秀的程序员,十分优秀!