1

我进行了广泛的搜索,浏览了教程和技巧,但它不起作用!

EF 5 code-first 不会生成我的 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>());

        ...
    }

我已经尝试了 w/ 和 w/o 这些行,global.asax.cs并且 w/ 和 w/o 连接字符串。

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

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

解决了:

需要此代码global.asax.cs

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

1 回答 1

0

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

<configSections>...
</configSections>
<entityFramework>
    <defaultConnectionFactory 
        type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="System.Data.SqlServerCe.4.0" />
        </parameters>
    </defaultConnectionFactory>
</entityFramework>
于 2013-04-25T13:18:35.590 回答