1

我正在尝试使用 SQL Server 4.0 作为数据库引擎为 MVC 4 项目播种数据,并以 Microsoft MVC 音乐商店教程为例。我已经设置了种子和数据库上下文模型,但控制器无法找到数据。我已经验证了数据库文件是在 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; }
    }

}

调试器告诉我,.Find 之后控制器中的“盆地”对象仍然为空。这一定是我忽略的一个简单、基本的事情,但我可以在网上找到的所有帮助都假设提问者知道他们在做什么——在我的情况下不是这样!我还检查了实体框架数据库种子没有种子的讨论, 但这似乎不是答案。请忍受一个完全的菜鸟问题。

4

1 回答 1

0

您没有显示种子的完整代码,所以我不能确定,但​​您可能缺少Context.Changes()

你也写了

public class StartData : CreateDatabaseIfNotExists<RationalMethodEntities>

如果您在应用程序启动之前不删除数据库,它不会做任何事情,因为数据库已经存在。

你可以使用:

public class StartData : DropCreateDatabaseAlways <RationalMethodEntities>

每次开始或

public class StartData : DropCreateDatabaseAlways <DropCreateDatabaseIfModelChanges >

在模型更改时删除 db(这对于开发的开始非常有用)

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

于 2013-04-02T20:25:10.800 回答