【问题标题】:MVC unable to create controller in VS2010MVC无法在VS2010中创建控制器
【发布时间】:2012-11-27 23:00:39
【问题描述】:

我正在使用 mysql 驱动程序 6.6.4 和 EF 4.4.0.0。我的上下文可以创建数据库,它还创建了一个 _MigrationHistory 表,我可以插入、列出、删除记录。

我可以添加一个带有创建模型的动作,并自动创建模型,一切都很完美 这是我的清晰背景

public class MyContext : DbContext
{
    static MyContext()
    {
        Database.SetInitializer<MyContext>(null);
    }

    public MyContext()
        : base("Name=MyContext")
    {
    }

    public DbSet<AdminUser> AdminUsers { get; set; }
    public DbSet<Feedback> Feedbacks { get; set; }
    public DbSet<Navigation> Navigations { get; set; }
    public DbSet<SiteLink> SiteLinks { get; set; }
    public DbSet<SiteNew> SiteNews { get; set; }
    public DbSet<StockList> StockLists { get; set; }
    public DbSet<SubNavigation> SubNavigations { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AdminUserMap());
        modelBuilder.Configurations.Add(new FeedbackMap());
        modelBuilder.Configurations.Add(new NavigationMap());
        modelBuilder.Configurations.Add(new SiteLinkMap());
        modelBuilder.Configurations.Add(new SiteNewMap());
        modelBuilder.Configurations.Add(new StockListMap());
        modelBuilder.Configurations.Add(new SubNavigationMap());


    }

我的 constring 与我的上下文同名,如上所述,这一切都有效。我还将数据提供程序添加到我的 web.config 文件中。

我什至在创建存储过程中添加了一些代码,这一切都很好,底线一切看起来都很好,就我而言,我已经完成了我可能做的所有事情。

但是当我创建一个控制器时,我得到了这个:[使用带有创建、编辑、删除选项的创建控制器)

现在这里和网络上有很多关于这个的噪音,但我实际上已经涵盖了所有内容。我什至将我的 dbContext 设置为 DbSets,仅此而已。这已经让我头疼了很长一段时间了,我已经做了所有事情并阅读了所有可能的内容,然后才开始在这里提问。

现在我知道使用 SQL Server 等可能会容易得多,但是我没有那个选项,我有一个非常好的 mysql 集群和许多站点首先使用 EF 和代码,当我安装 asp 时问题似乎开始了.net MVC 4 并升级到最新的 .net。

请有什么想法,我会尝试任何东西

web.config

<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
   <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 </configSections>
 <connectionStrings>
  <add name="MyContext" connectionString="server=localhost;database=MyDB;user id=myuser; password=mypass; Pooling=false" providerName="MySql.Data.MySqlClient" />
 </connectionStrings>
<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />
  <add key="PreserveLoginUrl" value="true" />
  <add key="ClientValidationEnabled" value="true" />
  <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
  <compilation debug="true" targetFramework="4.0" />
  <pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">
    <namespaces>
      <add namespace="System.Web.Helpers" />
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
      <add namespace="System.Web.WebPages" />
    </namespaces>
  </pages>
</system.web>
<system.data>
  <DbProviderFactories>
       <remove invariant="MySql.Data.MySqlClient" />
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
   </DbProviderFactories>
 </system.data>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
       <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
       <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" />
    </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.6.4.0" newVersion="6.6.4.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
       <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
     </handlers>
       </system.webServer>
      <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
         <parameters>
         <parameter value="v11.0" />
       </parameters>
     </defaultConnectionFactory>
  </entityFramework>
  </configuration>

型号:

public class AdminUser
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public short UserLevel { get; set; }
}

映射

public class AdminUserMap : EntityTypeConfiguration<AdminUser>
{
    public AdminUserMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

        // Properties
        this.Property(t => t.UserName)
            .IsRequired()
            .HasMaxLength(50);

        this.Property(t => t.Password)
            .IsRequired()
            .HasMaxLength(50);

        this.Property(t => t.Email)
            .HasMaxLength(150);

        // Table & Column Mappings
        this.ToTable("AdminUsers", "eyebag");
        this.Property(t => t.Id).HasColumnName("Id");
        this.Property(t => t.UserName).HasColumnName("UserName");
        this.Property(t => t.Password).HasColumnName("Password");
        this.Property(t => t.Email).HasColumnName("Email");
        this.Property(t => t.UserLevel).HasColumnName("UserLevel");
    }
}

【问题讨论】:

  • 在创建任何控制器或其他任何东西之前,您是否尝试过编译解决方案并运行几个单元测试以查看代码是否有效?完成后,您可以添加控制器。至少你会知道问题与任何数据库代码无关。
  • 是的,我可以添加记录,上下文创建表,我还可以列出添加的记录并删除记录......一切都很完美,只是这个小问题
  • 嗯,这绝对是因为您使用非 MSSQL 数据库,但可能会有所帮助:stackoverflow.com/questions/12165185/…
  • 我的数据库相关的东西都在一个单独的类库中,我有 mysql 连接器 6.6.4 的源代码,这是大部分代码的来源,(有测试项目)添加了 mvc之后的解决方案,这也让我想到了,所以我实际上创建了另一个项目,只是引用了我需要的东西(完全空白的项目),这给出了同样的问题:-)
  • 你能发布 web.config 吗?我曾经遇到过类似的问题,这是因为 web.config 中的一些配置部分。

标签: c# .net asp.net-mvc asp.net-mvc-3 entity-framework


【解决方案1】:

试试这些: 可能默认端口号在某种程度上是错误的,因此将端口号添加到您的连接字符串以匹配您的服务器设置。 将您的设置减少到最低限度,删除任何不直接运行所需的内容:appSettings、运行时(不确定这是否会正确默认)、处理程序(在 system.webserver 内)。

【讨论】:

  • 如前所述,我已经重新尝试了新的完全空白的项目,并逐行重新构建它,您所说的端口号错误是什么意思?数据仍然可以正常工作,除了右键单击->添加控制器->首先使用EF代码创建所有功能设置
  • 我认为有些地方与 VS 的链接断开了,因为我不是第一个遇到此错误的人,EF 效果很好,它不会为您创造任何东西,并且有一个很大的旧翻盖
【解决方案2】:

似乎最简单的解决方案是下载 nuget 包 MvcScaffolding,然后使用带有 EF 创建、编辑、删除此版本的添加控制器的 MVCScaffolding 版本有效并解决了我的问题,为什么其他选项可以不工作可能未知,但感谢大家的帮助和建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多