Asp.net mvc 数据初始化是如何工作的?
我在将数据初始化到.NET web应用程序中的SQL Server CompactAsp.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) {
.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);
}
}