在.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"}
};
}
}
}(出于测试目的,我使用DropCreateDatabaseAlways而不是DropCreateDatabaseIfModelChanges)
我在Global.asax.cs文件中调用的这个初始化器类:
protected void Session_Start()
{
System.Data.Entity.Database.SetInitializer(new R10491.Models.SampleData());
}(同样,出于测试目的,我在每次会话启动时调用它)。
我的连接字符串定义:
<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类中定义的表,也没有初始化数据。
发布于 2013-01-01 00:12:26
看起来您忘记了将刚刚创建的Category添加到DB表中。如果你不把它添加到context的表中,Entity Framework什么也看不到……所以你必须这样做:
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();
}对于DataSource问题,请尝试以下修改后的连接字符串:
<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" />请注意,上面的数据库名称与名称空间和上下文名称相匹配。
我还使用Application_Start()调用Global.asax.cs文件中的SetInitializer方法。我看到你在Session_Start()内部调用它。也许这就是问题所在。将您的代码更改为:
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(new R10491.Models.SampleData());
}您还可以尝试调用Initialize方法:
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(new R10491.Models.SampleData());
using (var context = new LibraryEntities())
{
context.Database.Initialize(true);
}
}https://stackoverflow.com/questions/14103636
复制相似问题