MVC 4.0控制器找不到种子数据

本文关键字:种子 数据 找不到 控制器 MVC | 更新日期: 2023-09-27 18:07:11

我正试图使用SQL server 4.0作为数据库引擎,以Microsoft MVC音乐商店教程为例,为MVC 4项目种子数据。我已经建立了一个种子和DB上下文模型,但控制器无法找到数据。我已经验证了数据库文件是否在App_Data中创建,并验证了SetIntitializer是否在Application_Start中正确设置。以下是我的代码:

种子数据:

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; }
    }

}

调试器告诉我,在之后,控制器中的"盆"对象仍然为空。发现这一定是我忽略的一件简单、基本的事情,但我在网上能找到的所有帮助都假设询问者知道他们在做什么——在我的情况下不是这样!我还查看了实体框架数据库种子dos';t种子但这似乎不是答案。请耐心回答一个毫无意义的问题。

MVC 4.0控制器找不到种子数据

您没有显示seed的完整代码,所以我不能确定,但您可能缺少上下文。更改((

你还写了

public class StartData : CreateDatabaseIfNotExists<RationalMethodEntities>

如果在应用程序启动之前不删除数据库,那么它将不会执行任何操作,因为数据库已经存在。

您可以使用:

public class StartData : DropCreateDatabaseAlways <RationalMethodEntities>

每次启动或时将其丢弃

public class StartData : DropCreateDatabaseAlways <DropCreateDatabaseIfModelChanges >

当模型发生变化时删除数据库(这对开发的开始很好(

调试:删除数据库,终止应用程序服务器(使其返回应用程序启动(,在种子中设置断点。启动Debug,如果它进入种子状态,请在SaveChange((之后检查数据是否在其中。