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

Posted

技术标签:

【中文标题】ASP.NET EF5 代码优先不创建 SQL Server CE 数据库【英文标题】:ASP.NET EF5 code-first not creating SQL Server CE database 【发布时间】:2013-04-25 11:13:44 【问题描述】:

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

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>());

        ...
    

我已经在global.asax.cs 中尝试了 w/ 和 w/o 这些行以及 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】:

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

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

【讨论】:

仍然没有数据库文件。在数据连接下,服务器资源管理器有一个到 MyContex.sdf 的链接断开,当我尝试打开它时,它说:The database file cannot be found. Check the path to the database. [ Data Source = c:\...path...\MyProject\SekretarskiModul\App_Data\MyContext.sdf ]

以上是关于ASP.NET EF5 代码优先不创建 SQL Server CE 数据库的主要内容,如果未能解决你的问题,请参考以下文章

锁定事务 (SQL Server + EF5)

使用带有实体框架代码优先和 ASP.NET MVC 3 和 mvc miniprofiler 的 SQL Server CE 时出现问题

EF5代码优先 - 使用迁移更改列类型

ASP.NET 5 EF7 代码优先迁移默认按字母顺序创建列

EF5 代码优先迁移:小数精度和小数位数

ASP .NET 代码优先方法中的连接表