C# MVC 6创建视图问题:创建DBContext以获取模型时出错
尝试使用NavBar模型和如下所示的NavBarEntity(在MVC6中)创建“创建”视图时,会收到此消息 运行所选代码生成器时出错:创建DBVContext实例以获取模型时出错。。。值不能为空。。。参数名称:connectionString 我在视图向导中选择了此模式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;
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; }
}