上下文和上下文初始值设定项不是 运行
Context and Context Initializer Not Running
我正在尝试在我的 MVC 站点上进行代码优先开发,尽管 global.ascx 文件正在 运行 编写代码来创建新的初始化程序,但初始化程序本身并不是 运行.我在上下文和初始化程序的开头都放置了一个断点,但都没有被击中。
Global.ascx
Database.SetInitializer<AbstractContext>(new AbstractContextInitializer());
上下文:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace AbstractThinking2015.Models
{
public class AbstractContext : DbContext
{
public DbSet<BlogModel> Blogs { get; set; }
}
}
初始化程序:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace AbstractThinking2015.Models
{
public class AbstractContextInitializer : DropCreateDatabaseAlways<AbstractContext>
{
protected override void Seed(AbstractContext context)
{
context.Blogs.Add(
new BlogModel() { Title = "Test Title",
Date = DateTime.Now,
User = "Liane",
Category = "Test",
Post = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus rhoncus tristique leo et vehicula. Integer eu imperdiet orci, sit amet convallis ipsum. Sed in commodo urna. Sed venenatis neque augue, et faucibus purus aliquet eget. Suspendisse nec sapien nec justo ullamcorper rutrum. Praesent maximus nulla eget rhoncus scelerisque. Vivamus at felis porta, placerat augue non, interdum dui."
});
context.SaveChanges();
}
}
}
为了以防万一,这是模型:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace AbstractThinking2015.Models
{
public class BlogModel
{
//public BlogModel()
//{
// Date = DateTime.Now;
// User = "Liane";
//}
public int BlogModelId { get; set; }
[DisplayName("Blog Title")]
[Required(ErrorMessage = "Your blog must have a title")]
public string Title { get; set; }
[DisplayName("Blog Date")]
[Required(ErrorMessage = "Your blog must have a date")]
public DateTime Date { get; set; }
[DisplayName("Blog User")]
[Required(ErrorMessage = "Your blog must have a user")]
public string User { get; set; }
[DisplayName("Blog Category")]
[Required(ErrorMessage = "Your blog must have a category")]
public string Category { get; set; }
[DisplayName("Blog Post")]
[Required(ErrorMessage = "Your blog must have a post")]
[DataType(DataType.MultilineText)]
public string Post { get; set; }
}
}
确保将初始化程序代码放在 Global.asax.cs 文件中 MvcApplication class 的受保护的 void Application_Start() 方法中。
这里是关于 DropCreateDatabaseAlwaysInitializer 的 post。 How do I use Entity Framework in Code First Drop-Create mode?
@EduLopez 是对的,确保你运行以下
Database.SetInitializer(new AbstractContextInitializer());
在访问上下文之前。
我也不是 100% 确定,但我认为在您尝试访问上下文之前不会进行播种。所以一定要 运行 一个查询,然后再认为它不起作用。
您可以将对初始化程序的调用放在 DbContext class 中,如下所示:
Public Class AuctionsDataContext
Inherits DbContext
Public Property Auctions As DbSet(Of Auction)
Public Property Bids As DbSet(Of Bid)
Shared Sub New()
Database.SetInitializer(New DropCreateDatabaseIfModelChanges(Of AuctionsDataContext))
End Sub
End Class
请注意,构造函数需要定义为静态 (C#) 或共享 (VB) 方法。
我正在尝试在我的 MVC 站点上进行代码优先开发,尽管 global.ascx 文件正在 运行 编写代码来创建新的初始化程序,但初始化程序本身并不是 运行.我在上下文和初始化程序的开头都放置了一个断点,但都没有被击中。
Global.ascx
Database.SetInitializer<AbstractContext>(new AbstractContextInitializer());
上下文:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace AbstractThinking2015.Models
{
public class AbstractContext : DbContext
{
public DbSet<BlogModel> Blogs { get; set; }
}
}
初始化程序:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace AbstractThinking2015.Models
{
public class AbstractContextInitializer : DropCreateDatabaseAlways<AbstractContext>
{
protected override void Seed(AbstractContext context)
{
context.Blogs.Add(
new BlogModel() { Title = "Test Title",
Date = DateTime.Now,
User = "Liane",
Category = "Test",
Post = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus rhoncus tristique leo et vehicula. Integer eu imperdiet orci, sit amet convallis ipsum. Sed in commodo urna. Sed venenatis neque augue, et faucibus purus aliquet eget. Suspendisse nec sapien nec justo ullamcorper rutrum. Praesent maximus nulla eget rhoncus scelerisque. Vivamus at felis porta, placerat augue non, interdum dui."
});
context.SaveChanges();
}
}
}
为了以防万一,这是模型:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace AbstractThinking2015.Models
{
public class BlogModel
{
//public BlogModel()
//{
// Date = DateTime.Now;
// User = "Liane";
//}
public int BlogModelId { get; set; }
[DisplayName("Blog Title")]
[Required(ErrorMessage = "Your blog must have a title")]
public string Title { get; set; }
[DisplayName("Blog Date")]
[Required(ErrorMessage = "Your blog must have a date")]
public DateTime Date { get; set; }
[DisplayName("Blog User")]
[Required(ErrorMessage = "Your blog must have a user")]
public string User { get; set; }
[DisplayName("Blog Category")]
[Required(ErrorMessage = "Your blog must have a category")]
public string Category { get; set; }
[DisplayName("Blog Post")]
[Required(ErrorMessage = "Your blog must have a post")]
[DataType(DataType.MultilineText)]
public string Post { get; set; }
}
}
确保将初始化程序代码放在 Global.asax.cs 文件中 MvcApplication class 的受保护的 void Application_Start() 方法中。
这里是关于 DropCreateDatabaseAlwaysInitializer 的 post。 How do I use Entity Framework in Code First Drop-Create mode?
@EduLopez 是对的,确保你运行以下
Database.SetInitializer(new AbstractContextInitializer());
在访问上下文之前。
我也不是 100% 确定,但我认为在您尝试访问上下文之前不会进行播种。所以一定要 运行 一个查询,然后再认为它不起作用。
您可以将对初始化程序的调用放在 DbContext class 中,如下所示:
Public Class AuctionsDataContext
Inherits DbContext
Public Property Auctions As DbSet(Of Auction)
Public Property Bids As DbSet(Of Bid)
Shared Sub New()
Database.SetInitializer(New DropCreateDatabaseIfModelChanges(Of AuctionsDataContext))
End Sub
End Class
请注意,构造函数需要定义为静态 (C#) 或共享 (VB) 方法。