我尝试使用示例数据初始化数据库时遇到错误:
无法设置类型的数据库初始化程序 ' Blog.Models.DAL.BlogInitializer,博客'对于DbContext类型 ' Blog.Models.DAL.BlogContext,Blog'在申请中指定
内部异常是这样的:
无法找到文件或程序集'博客'或其中一个依赖项。 无法找到指定的文件。
我在同一个Blog解决方案中的单独项目中有Blog.Model和Blog.WebUI。 我编辑了Web.config(在Blog.WebUI中)文件:
<connectionStrings>
<add name="BlogContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=Blog;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<entityFramework>
<contexts>
<context type="Blog.Models.DAL.BlogContext, Blog">
<databaseInitializer type="Blog.Models.DAL.BlogInitializer, Blog" />
</context>
</contexts>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
在Server Explorer中,我看到一个由它创建的可访问数据库,但里面没有表。
BlogContext类:
namespace Blog.Models.DAL
{
public class BlogContext : DbContext
{
public BlogContext() : base("BlogContext")
{
}
public DbSet<Post> Posts { get; set; }
}
}
初始化程序:
namespace Blog.Models.DAL
{
public class BlogInitializer : DropCreateDatabaseIfModelChanges<BlogContext>
{
protected override void Seed(BlogContext context)
{
var posts = new List<Post>
{
new Post { Title="sadasd", Content="asdsa", Date=DateTime.Parse("2016-11-13"), Language="pl" },
new Post { Title="sadasd", Content="asdsa", Date=DateTime.Parse("2016-11-13"), Language="pl" },
new Post { Title="sadasd", Content="asdsa", Date=DateTime.Parse("2016-11-13"), Language="pl" },
new Post { Title="sadasd", Content="asdsa", Date=DateTime.Parse("2016-11-13"), Language="pl" },
new Post { Title="sadasd", Content="asdsa", Date=DateTime.Parse("2016-11-13"), Language="pl" }
};
posts.ForEach(p => context.Posts.Add(p));
context.SaveChanges();
}
}
}
答案 0 :(得分:1)
EF无法为名为DbContext
的{{1}}实例实例化数据库初始化程序。
在配置中,您已为数据库初始值设定项的类型配置了正确的值:
BlogContext
问题是您没有使用正确的程序集名称<contexts>
<context type="Blog.Models.DAL.BlogContext, Blog">
<databaseInitializer type="Blog.Models.DAL.BlogInitializer, Blog" />
</context>
</contexts>
。您需要通过上下文菜单或 Alt + F4 转到项目“属性”,然后复制正确的程序集名称。然后就这样说:
Blog