Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 数据初始化是如何工作的?_Asp.net Mvc_Entity Framework_Initialization_Sql Server Ce_Seeding - Fatal编程技术网

Asp.net mvc 数据初始化是如何工作的?

Asp.net mvc 数据初始化是如何工作的?,asp.net-mvc,entity-framework,initialization,sql-server-ce,seeding,Asp.net Mvc,Entity Framework,Initialization,Sql Server Ce,Seeding,我在将数据初始化到.NET web应用程序中的SQL Server Compact.sdf数据文件时遇到问题 我有一个数据初始化类 namespace R10491.Models { public class SampleData : DropCreateDatabaseAlways<LibraryEntities> { protected override void Seed(LibraryEntities context) {

我在将数据初始化到.NET web应用程序中的SQL Server Compact
.sdf
数据文件时遇到问题

我有一个数据初始化类

namespace R10491.Models
{
    public class SampleData : DropCreateDatabaseAlways<LibraryEntities>
    {
        protected override void Seed(LibraryEntities context)
        {
            var categories = new List<Category>
            {
                new Category{Id=1, Name="Sci-fi"}
            };

        }
    }
}
(同样出于测试目的,我在每次会话启动时调用它)

我的连接字符串定义:

  <connectionStrings>
    <add name="LibraryEntities"
     connectionString="Data Source=C:\Users\Administrator\Documents\Visual Studio 2012\Projects\2OBOP3_KU1\R10491\App_Data\R10491_library.sdf;"
     providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>


但是初始化不起作用-未创建在
SampleData
类中定义的表,也未初始化数据。

看起来您忘记了将刚刚创建的
类别添加到DB表中。如果不将其添加到
上下文
的表中,
实体框架
将看不到任何内容。。。所以你必须这样做:

protected override void Seed(LibraryEntities context)
{
    var categories = new List<Category>
    {
        new Category{Id=1, Name="Sci-fi"}
    };

    foreach(Category c in categories)
    {
        context.Categories.Add(c)
    }

    // Call the Save method in the Context
    context.SaveChanges();  
}

您还可以尝试调用
Initialize
方法:

protected void Application_Start()
{
     System.Data.Entity.Database.SetInitializer(new R10491.Models.SampleData());

     using (var context = new LibraryEntities())
     {
         context.Database.Initialize(true);
     }
}

是的,我错过了,谢谢。但还有一个问题。当我删除一个.sdf文件并运行我的应用程序时,.sdf数据文件并没有创建,应该创建,不是吗?这与我最初的问题有关,这个初始化过程是如何工作的。。。它应该在您重新启动应用程序并检测到
.sdf
不再存在后自动创建。通常,此文件是在
\App\u Data
文件夹中创建的。但在我的情况下,不会创建
.sdf
文件。是否有必要提交更改或类似的更改?问题应该在哪里?谢谢你的建议,我在谷歌上搜索了一个小时,不知道哪里出了问题。我的ConnectionString可能有问题-我将文件位置定义为完整路径(许多教程使用另一种语法)。我在上面的问题中提到了连接字符串。我的上下文类
FitnessCenterContext
位于命名空间
FitnessCenter.Model
中。我使用的是一个单独的类库。如果您不熟悉名称空间,请检查以下内容:。你能告诉我你在用什么吗:SQLServerExpress,LocalDB,等等。。。来存储数据。您是否尝试将代码放在
应用程序\u Start()
而不是
会话\u Start()
中?
<add name="LibraryEntities"
     connectionString="DataSource=|DataDirectory|R10491_library.sdf"
     providerName="System.Data.SqlServerCe.4.0" />
<add name="FitnessCenterContext"
     connectionString="DataSource=|DataDirectory|FitnessCenter.Model.FitnessCenterContext.sdf"
     providerName="System.Data.SqlServerCe.4.0" />
protected void Application_Start()
{
     System.Data.Entity.Database.SetInitializer(new R10491.Models.SampleData());
}
protected void Application_Start()
{
     System.Data.Entity.Database.SetInitializer(new R10491.Models.SampleData());

     using (var context = new LibraryEntities())
     {
         context.Database.Initialize(true);
     }
}