在MVC上添加控制器,不同的对象类型

本文关键字:对象 类型 MVC 添加 控制器 | 更新日期: 2023-09-27 18:04:35

所以,我对MVC相当不熟悉,刚刚开始遵循DotNetCurry的几个教程,更具体地说,这一个,但我面临这个问题,它已经回答了

但是这个问题的答案对我不起作用。下面是我的测试项目

的上下文
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace Sysbat.Models
{
    public class SysbatContext : DbContext
    {
        public DbSet<Objeto> Objetos { get; set; }
        public DbSet<Propiedad> Propeidades { get; set; }
        public DbSet<ObjetoPropiedades> ObjetosPropiedades { get; set; }
        public DbSet<ObjetoValores> ObjetosValores { get; set; }
        public DbSet<PropiedadValores> PorpiedadesValores { get; set; }
        public SysbatContext() : base("DevConn"){}
    }
}

知道为什么我也得到Unable to cast object of type 'System.Data.Entity.Core.Objects.ObjectContext' to 'System.Data.Objects.ObjectContext'时添加控件?

我不想让死人复活,因为这个答案是去年的,所以我发了一个新问题。

更新1:

经过进一步的研究,我发现这是不可能使用我正在使用的EF 6.1,它要么升级到mvc 5,要么降级到EF 5。鉴于我正在使用VS2010(我的笔记本电脑无法处理VS2012或更新版本,需要升级,XD) MVC 5不是一个选项,所以我卸载了EF 6并安装了5,现在,我得到了另一个错误

Unable to retrieve metadata for 'Sysbat.Models.Objeto'.
Unrecognized element 'providers'.

这是类' object '我试图创建控件

/// <summary>
/// Class that hold the Objetos to be used in the system
/// </summary>
public class Objeto
{
    [Key]
    public int Oid { get; set; }
    public string Nombre { get; set; }
    public DateTime FechaCreacion { get; set; }
}

在MVC上添加控制器,不同的对象类型

这可以是许多不同的东西。这里没有足够的信息来正确诊断。

我发现控制器模板首先是非常挑剔的。有时,如果您没有重新构建解决方案的某个部分,它将失败。有时它会无缘无故地失败。而且,它几乎只有直接与实体类和DbContext一起工作。如果您尝试使用视图模型,或者您将使用存储库或服务之类的东西,而不是直接使用DbContext,则会失败。

无论长短,当你继续使用MVC时,你会发现它带来的麻烦远远超过它的价值。我仍然使用"添加>控制器…",但我只是选择"MVC 5控制器-空",并设置自己的一切。

然而,如果你仍然想要完整的控制器动作和视图生成功能,我能推荐的最好的事情是首先,清理和重建你的解决方案。如果仍然出现错误,请关闭Visual Studio complete,然后重新打开解决方案。有时候这就足以让它起作用了。此外,请确保解决方案中的所有项目都使用完全相同的实体框架和MVC版本。如果相互引用的项目之间存在版本不匹配,有时会出现奇怪的行为。

我找到了最后一个问题的答案现在我可以添加控制器了

编辑:

根据建议,我正在添加我在链接

中找到的解决方案最后,问题出在我的连接字符串上。在我的web中指定了一个提供商。配置,我没有使用,所以我只需要删除设置,它工作得很好!

:

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>