ASP.NET EF5代码优先不创建SQL Server CE数据库

时间:2013-04-25 11:13:44

标签: web-applications asp.net-mvc-4 ef-code-first sql-server-ce entity-framework-5

我搜索了很多,经过了教程和提示,但它不会工作!

EF 5代码优先没有生成我的SQL Server CE 4数据库文件。

我有一个ASP.NET Web应用程序,我想使用代码优先方法生成数据库。

以下是我的模型类:

    public class Class
    {
        [Key]
        public int id { get; set; }
        public bool isLecture { get; set; }

        public int courseId { get; set; }
        public virtual Course course { get; set; }
        public int teacherId { get; set; }
        public virtual Teacher teacher { get; set; }
    }

    public class Course
    {
        [Key]
        public int id { get; set; }
        public string name { get; set; }
        public int semester { get; set; }
    }

    public class Teacher
    {
        public int id { get; set; }
        public string name { get; set; }
        public string lastName { get; set; }
    }

以下是上下文:

    public class MyContext : DbContext
    {
        public DbSet<Class> Classes { get; set; }
        public DbSet<Teacher> Teachers { get; set; }
        public DbSet<Course> Courses { get; set; }
    }

以下是web.config中的连接字符串:

    <add name="MyContext" 
         connectionString="Data Source=|DataDirectory|\MyContext.sdf"
         providerName="System.Data.SqlServerCe.4.0" />

这是global.asax.cs

    protected void Application_Start()
    {
        Database.SetInitializer<MyContext>
            (new DropCreateDatabaseIfModelChanges<MyContext>());

        ...
    }

我在global.asax.cs和w /和连接字符串中尝试了w /和w / o这些行。

应用程序加载并正常工作,但不创建数据库文件。我自己尝试创建.sdf文件,因此可以先用EF代码填充,但它仍然是空的。

该项目是使用HotTowel模板制作的ASP.NET MVC 4,如果它意味着什么,我正在使用Visual Studio 2012。

解决:

global.asax.cs中需要此代码:

    MyContext context = new MyContext();
    context.Database.Initialize(true);

1 个答案:

答案 0 :(得分:0)

这对我有用 - 你需要连接工厂......

<configSections>...
</configSections>
<entityFramework>
    <defaultConnectionFactory 
        type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="System.Data.SqlServerCe.4.0" />
        </parameters>
    </defaultConnectionFactory>
</entityFramework>