应用程序启动时的种子数据库 - ASP MVC 3 和 EF

2023-12-01

由于某种原因,我无法让我的应用程序在应用程序启动时使用一些测试数据为数据库播种。

执行顺序:

     1) Application_Start() in Global.asax

         - Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>());

         - new LocatorContext.DropCreateIfChangeInitializer()
           .InitializeDatabase(new LocatorContext());

     2) onModelCreating() in my DBContext class 


     3) Page is rendered and no data is inserted into the database

任何关于为什么或如何解决它的想法将不胜感激。

我的 Global.asax.cs 文件

//Global.asax.cs
protected void Application_Start()
{
    Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>());

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

我的 DBContext 类

//ClubLocatorContext.cs        
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using ClubLocator.Models;
using ClubLocator.Models.ViewModels;

namespace ClubLocator.DAL
{
    public class LocatorContext : DbContext
    {

      public DbSet<Prospect> Prospects { get; set; }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
          base.OnModelCreating(modelBuilder);
          modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
      }

      public void Seed(LocatorContext context)
      {
          var prospect = new List<Prospect>
                         {
                              new Prospect
                              {
                                      FirstName = "John",
                                      LastName = "Smith",
                                      Address1 = "1313 Mockingbird Lane",
                                      Email = "[email protected]"
                              }
                         };

          prospect.ForEach(r => context.Prospects.Add(r));
          context.SaveChanges();
      }

      public class DropCreateIfChangeInitializer : DropCreateDatabaseIfModelChanges<LocatorContext>
      {
          protected override void Seed(LocatorContext context)
          {
              context.Seed(context);
              base.Seed(context);
          }
      }

      public class CreateInitializer : DropCreateDatabaseAlways<LocatorContext>
      {
          protected override void Seed(LocatorContext context)
          {
              context.Seed(context);
              base.Seed(context);
          }
      }

      static LocatorContext()
      { 
          #if DEBUG
          Database.SetInitializer<LocatorContext> (new DropCreateIfChangeInitializer ());
          #else
          Database.SetInitializer<LocatorContext> (new CreateInitializer ());
          #endif
      }
    }
}

首先,您的所有 EF 代码看起来都很好。

问题是,您已经初始化了数据库。否则 EF 将等待,直到您以某种方式访问​​它才能初始化它。

如果没有任何页面访问数据,您甚至可以在数据库不启动的情况下随意浏览您的网站。

如果您想在应用程序启动时强制数据库初始化,请执行以下操作:

using (var db = new LocatorContext())
{
    db.Database.Initialize(true);
}

我通常创建一个静态类,例如:

public static class LocatorInitializationHandler
{
    public static void Initialize()
    {
        // if you want to use your initializer
        Database.SetInitializer(new CreateInitializer()); 

        using (var db = new LocatorContext())
        {
            db.Database.Initialize(true);
        }
    }
}

然后我可以从 App_start 调用:

//Global.asax.cs
protected void Application_Start()
{
    LocatorInitializationHandler.Initialize();

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序启动时的种子数据库 - ASP MVC 3 和 EF 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 随机创建和定位元素超出浏览器窗口

    我使用 JQuery 创建元素并将它们添加到正文中 我也尝试使用 DIV 并获得相同的结果 JQuery 正在创建的新 DIV 的位置远远超出了窗口 随机限制 我几乎有一个空白的 HTML 页面 它引入了 JQuery 和该页面的 scri
  • 如何将字节数组转换为 Jar

    我试图从字节数组加载一个jar 而不将其写入文件 将其加载到内存中 我制作了一个自定义的 ClassLoader 但是当我尝试使用它并加载一个类时 它给了我 ClassNotFoundException 类加载器 public class
  • BigQuery - 将通用 JSON 转换为 STRUCT

    我的 BigQuery 中有一个列 其中包含简单的单深度 JSON 格式的各种不同消息 我想将其提取到 STRUCT 中 输入表看起来像 并应转化为 我知道 BigQuery json 函数 例如JSON EXTRACT例如发布的here
  • 如何查找 Windows 中哪个程序正在使用端口 80? [复制]

    这个问题在这里已经有答案了 如何查找 Windows 中哪个程序正在使用端口 80 我找不到它 输入命令 netstat aon findstr 80 它将显示所有使用端口 80 的进程 注意pid 进程 ID 在右栏中 如果您想释放端口
  • doctrine2 queryBuilder 必须仅返回与数组值 (ids) 匹配的结果:0/Null 和/或 1 和/或 许多 id 必须返回 1 个结果

    我有一个名为的集合数组 configurations 该数组与我的实体匹配Configuration php连接到Product php as a ManyToMany 现在我有另一个名为WorkType php这也连接到Configura
  • 是否可以在空手道中的 read() 调用中评估变量? [复制]

    这个问题在这里已经有答案了 demoType是一个变量 我希望该变量的内容是在以下表达式中计算的内容 def call read demoType 相反 它尝试评估变量的名称而不是其内容 不存在这样的事情def call 也许你正在尝试 c
  • Request.IsAjaxRequest 在 MVC3 中永远不会返回 true

    我正在使用 Asp net MVC3 并尝试向服务器执行一个简单的 Ajax 发布 该服务器返回部分视图并在搜索期间更新我的项目列表 using Ajax BeginForm PartialUpdate Listing new AjaxOp
  • 将图像转换为字节数组,反之亦然

    我正在尝试通过 android 将图像作为字节数组发送 然后在服务器端将其转换回 png 文件 我得到IllegalArgumentException在服务器端 这是我的 android 代码 它将图像转换为字节数组并将其作为请求发送到服务
  • pdfpages 在最新版本上生成错误

    我今天尝试用 Latex 重新编译我的学士论文 但遇到了 pdfpages 包的问题 虽然当我最初编译论文时它工作得很好 但现在它会抛出 未定义的控制序列 错误 新的 pdfpages 包 打包于 24 09 2019 Miktex 控制台
  • 在 onPause() 或 onStop() 中保存持久数据?

    确实 当您的应用程序需要保存一些持久数据时 您应该始终在onPause 方法除了onStop 方法 因为如果 android 操作系统杀死了你的进程 那么onStop and onDestroy 方法从未被调用 您应该将所有关键数据保存在o
  • Java:以格式化字符串的形式返回条目长度变化很大的二维数组

    我想写一个toStringMatrix 类的方法 我需要返回包含矩阵的格式化字符串 矩阵中的条目长度差异很大 因此只需用TAB这不是窍门 现在我有以下内容 public String toString String str for int
  • 本地调试 Nuget 包

    我有一个 Visual Studio net core api 它在我的解决方案中引用基于神器的 nuget 包 nuget包是一个 net core类库 在我的本地 我有两个解决方案 主要 API 解决方案和类库解决方案 我想要实现的是
  • 访问模型/控制器中的视图

    我有一个像这样的 MyData php 类 class myData function render view new Zend View view gt str This is string echo view gt render myv
  • 如何检查sql中表中的任何列中是否存在某个值

    假设我的表中有 100 列 我不知道特定值可能存在于哪些列中 所以 我想检查所有列 如果它存在于 100 列中的任何一列中 我想选择它 我搜索了一下 在大多数地方 解决方案似乎类似于以下内容 select from tablename wh
  • 如何使用 Rselenium 在网页中查找 元素?

    我在网页中有以下标签 a target self href View Data Set a 如何在 Rselenium 中查找该元素 例如 如果我当前的会话保存在 remDr 中 我应该搜索什么 webElem lt remDr findE
  • interdiff 能做什么而 diff 不能做什么?

    如果我想找到两个差异之间的差异 为什么我不能diff两个差异 我已经测试过diff diff1 diff2 and interdiff diff1 diff2并且没有发现输出有任何差异 在什么情况下它们会有所不同 我完全知道 interdi
  • 响应式 Adsense 广告大小随屏幕方向变化而调整(同时使用 Bootstrap 进行布局)

    在我的网站上 我使用 Bootstrap 3 2 进行响应式设计 并尝试在其中嵌入 Adsense 响应式添加 我在方向更改方面遇到问题 我希望添加会在此类事件中调整大小 但它不会发生 Adsense 准备好这样的功能了吗 一些old po
  • 集合接口与数组

    我们正在学习集合接口 我想知道你们对于它的一般用途是否有什么好的建议 有哪些用 Collection 可以做但用数组做不到的事情 你可以用数组做哪些你不能用集合做的事情 除了允许重复 最简单的思考方式是 集合基本上在每一个方面都击败了对象数
  • 按值排序字典 python [重复]

    这个问题在这里已经有答案了 假设我有一个字典 data 1 b 2 a 我想按 b 和 a 对数据进行排序 这样我就得到了结果 a b 我怎么做 有任何想法吗 要获取值 请使用 sorted data values 要获取匹配的密钥 请使用
  • 应用程序启动时的种子数据库 - ASP MVC 3 和 EF

    由于某种原因 我无法让我的应用程序在应用程序启动时使用一些测试数据为数据库播种 执行顺序 1 Application Start in Global asax Database SetInitializer