使用EF初始化数据库的问题

时间:2016-11-13 19:11:04

标签: asp.net entity-framework

我尝试使用示例数据初始化数据库时遇到错误:

  

无法设置类型的数据库初始化程序   ' 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();
        }
    }
}

1 个答案:

答案 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