Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 6创建视图问题:创建DBContext以获取模型时出错_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# MVC 6创建视图问题:创建DBContext以获取模型时出错

C# MVC 6创建视图问题:创建DBContext以获取模型时出错,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,尝试使用NavBar模型和如下所示的NavBarEntity(在MVC6中)创建“创建”视图时,会收到此消息 运行所选代码生成器时出错:创建DBVContext实例以获取模型时出错。。。值不能为空。。。参数名称:connectionString 我在视图向导中选择了此模式 public class NavBarModel { public string ID { get; set; } public List<LinkModel> Links { get; set;

尝试使用NavBar模型和如下所示的NavBarEntity(在MVC6中)创建“创建”视图时,会收到此消息

运行所选代码生成器时出错:创建DBVContext实例以获取模型时出错。。。值不能为空。。。参数名称:connectionString

我在视图向导中选择了此模式

public class NavBarModel
{
    public string ID { get; set; }
    public List<LinkModel> Links { get; set; }
}
配置服务如下所示

        var cfg2 = Configuration["Data Source=MyPC\\SQLEXPRESS;Initial Catalog=Dashboard;Integrated Security=True;Pooling=False"];
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(cfg))
            .AddDbContext<NavBarEntity>(options =>
            {
                options.UseSqlServer(cfg2);
            });
var cfg2=Configuration[“数据源=MyPC\\SQLEXPRESS;初始目录=Dashboard;集成安全=True;池=False”];
services.AddEntityFramework()
.AddSqlServer()文件
.AddDbContext(选项=>
选项。使用SQLServer(cfg))
.AddDbContext(选项=>
{
options.UseSqlServer(cfg2);
});

问题:我做错了什么?

您尝试将DbContext与实体组合的方式不正确。DbContext应该引用您作为数据库集拥有的任何实体-实体不应该从中继承

您的DbContext应该与此类似(EF6)

编辑

我最初的答案是基于EF6而不是EF7。以下是我如何在EF7中实现上下文的完整性:

public class MyDbContext : DbContext
{
   public MyDbContext(DbContextOptions<MyDbContext> options) 
      : base(options)
   { }

   public DbSet<NavBarEntity> NavBars { get; set; }
   // Other entities
}
公共类MyDbContext:DbContext
{
公共MyDbContext(DbContextOptions)
:基本(选项)
{ }
公共数据库集导航栏{get;set;}
//其他实体
}

您尝试将DbContext与实体组合的方式不正确。DbContext应该引用您作为数据库集拥有的任何实体-实体不应该从中继承

您的DbContext应该与此类似(EF6)

编辑

我最初的答案是基于EF6而不是EF7。以下是我如何在EF7中实现上下文的完整性:

public class MyDbContext : DbContext
{
   public MyDbContext(DbContextOptions<MyDbContext> options) 
      : base(options)
   { }

   public DbSet<NavBarEntity> NavBars { get; set; }
   // Other entities
}
公共类MyDbContext:DbContext
{
公共MyDbContext(DbContextOptions)
:基本(选项)
{ }
公共数据库集导航栏{get;set;}
//其他实体
}

感谢上面列出的帮助

对于MVC6和EF7的新手,名为ConfigureServices的方法必须包含指向appsetting.json的json指针。该方法可在Startup.cs文件中找到

这是与上面显示的代码匹配的服务配置。括号中的字符串值指向json位置

        var cfg2 = Configuration["Data:DashboardContext:ConnectionString"];
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<DashboardContext>(options =>
            {
                options.UseSqlServer(cfg2);
            })
参数Name:connectionString为null的根本原因是appsettings.json必须完全如上图所示。json解析例程必须能够定位字符串名称/值对。。。请注意,这些配置属于包含其他名称的“数据”名称。在本例中,默认情况下“DefaultConnection”存在,我添加了“DashboardContext”部分

同样在MVC6中,您必须将connectionString类型更改为IServiceProvider,而不是像以前那样更改string

public class DashboardContext : DbContext
{
    public DashboardContext(IServiceProvider connectionString) : base (connectionString)
    {}
  public DbSet<NavBarEntity> NavBars { get; set; }
}
public类仪表板上下文:DbContext
{
公共仪表板上下文(IServiceProvider connectionString):基本(connectionString)
{}
公共数据库集导航栏{get;set;}
}
唉:视图没有问题……是的


感谢上面列出的帮助

对于MVC6和EF7的新手,名为ConfigureServices的方法必须包含指向appsetting.json的json指针。该方法可在Startup.cs文件中找到

这是与上面显示的代码匹配的服务配置。括号中的字符串值指向json位置

        var cfg2 = Configuration["Data:DashboardContext:ConnectionString"];
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<DashboardContext>(options =>
            {
                options.UseSqlServer(cfg2);
            })
参数Name:connectionString为null的根本原因是appsettings.json必须完全如上图所示。json解析例程必须能够定位字符串名称/值对。。。请注意,这些配置属于包含其他名称的“数据”名称。在本例中,默认情况下“DefaultConnection”存在,我添加了“DashboardContext”部分

同样在MVC6中,您必须将connectionString类型更改为IServiceProvider,而不是像以前那样更改string

public class DashboardContext : DbContext
{
    public DashboardContext(IServiceProvider connectionString) : base (connectionString)
    {}
  public DbSet<NavBarEntity> NavBars { get; set; }
}
public类仪表板上下文:DbContext
{
公共仪表板上下文(IServiceProvider connectionString):基本(connectionString)
{}
公共数据库集导航栏{get;set;}
}
唉:视图没有问题……是的


构造函数中的字符串适用于EF6,我假设您正在使用它(我将MVC6误读为EF6:-),为了完整性,我在回答中添加了EF7版本。虽然这显然不是问题的根本原因,但关于未从DbContext继承的实体的其他部分仍然适用。构造函数中的字符串适用于EF6,我假设您正在使用它(我将MVC6误读为EF6:-),为了完整性,我在回答中添加了EF7版本。关于未从DbContext继承的实体的其他内容仍然适用,尽管这显然不是问题的根本原因。
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-TestWebApplication1-d91c23e4-3565-476d-a7c0-45665bc0c367;Trusted_Connection=True;MultipleActiveResultSets=true"
    },
    "DashboardContext": {
       "ConnectionString": "Data Source= MYPC\\SQLEXPRESS;Initial Catalog=Dashboard;Integrated Security=True;Pooling=False"
      }
  },
public class DashboardContext : DbContext
{
    public DashboardContext(IServiceProvider connectionString) : base (connectionString)
    {}
  public DbSet<NavBarEntity> NavBars { get; set; }
}