我正在尝试使用SQL Server 4.0作为数据库引擎为MVC 4项目播种数据,使用Microsoft MVC音乐商店教程作为示例。我已经设置了种子和数据库上下文模型,但控制器无法找到数据。我已经验证数据库文件是在App_Data中创建的,并验证了在Application_Start中正确设置了SetIntitializer。以下是我的代码:
种子数据:
namespace RationalMethodApp.Models
{
public class StartData : CreateDatabaseIfNotExists<RationalMethodEntities>
{
protected override void Seed(RationalMethodEntities context)
{
new List<Basin>
{
new Basin {
basinId = 1, // attempting to force a key value, will remove
Name = "Replace me with a real basin",
Location = "In a real location",
drainageArea = 0.0M
}
}.ForEach(b => context.Basins.Add(b));
控制器:
public ActionResult Index(int? bsnId)
{
if (bsnId == null) // here to force a key value, will change
bsnId = 1;
var basin = rmDb.Basins.Find(bsnId);
return View(basin);
}
上下文类是:
namespace RationalMethodApp.Models
{
public class RationalMethodEntities : DbContext
{
public DbSet<Basin> Basins { get; set; }
public DbSet<SubArea> SubAreas { get; set; }
public DbSet<IdfCurve> IdfCurves { get; set; }
public DbSet<Analysis> Analyses { get; set; }
public DbSet<FlowSegment> FlowSegments { get; set; }
public DbSet<SheetFlowN> SheetFlowNs { get; set; }
public DbSet<RunoffCoefficient> RunoffCoefficients { get; set; }
public DbSet<StormFrequency> stormFrequencies { get; set; }
}
}
调试器告诉我在“.Find”之后控制器中的“basin”对象仍为空。这必须是一个我忽略的简单,基本的东西,但我能在网上找到的所有帮助都假设了问题者知道他们在做什么 - 在我的情况下不是这样!我还在Entity Framework database seed doesn't seed检查了讨论 但这似乎不是答案。请承担一个总的noob问题。
答案 0 :(得分:0)
您没有显示种子的完整代码,因此我无法确定,但您可能会错过 Context.Changes()。
你还写了
public class StartData : CreateDatabaseIfNotExists<RationalMethodEntities>
如果在应用程序启动之前没有删除数据库,它将不会执行任何操作,因为数据库已经存在。
您可以使用:
public class StartData : DropCreateDatabaseAlways <RationalMethodEntities>
每次开始时放弃它或
public class StartData : DropCreateDatabaseAlways <DropCreateDatabaseIfModelChanges >
在模型更改时删除数据库(这对于dev的开始非常有用)
要调试:删除数据库,终止应用程序服务器(因此它将返回到应用程序启动),种子中的断点。启动Debug,如果它进入种子,请在SaveChange()之后检查数据是否在其中。