假设我们有两个域类。
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
现在让我们创建一个上下文。
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
public BloggingContext () : base("Blogging")
{
Database.SetInitializer<BloggingContext >(new CreateDatabaseIfNotExists<BloggingContext>());
}
同样在这个课程中,我们想要添加一些测试数据来验证它。
public void AddBlog(params)
{
using (BloggingContext db = new BloggingContext ())
{
var t = new Blog { Name =name };
db.Blogs.Add(t);
try
{
db.SaveChanges();
return true;
}
然后为了测试它,我们创建了一个单元测试项目。
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
BloggingContext bloging= new BloggingContext ();
List<Post> post = new List<Post>();
Post objPost = new Post();
objPost.Post = "some";
objPost.OtherFields = "test";
// etc;
post.Add(objPost);
bloging.AddBlog("MyBlog",post);
为了运行测试,我发现代码首先进入了BloggingContext类的构造函数,因此执行了Database.SetInitializer...
。
然后
使用(BloggingContext db = new BloggingContext())
它再次调用了构造函数,我不确定它是否正常。
答案 0 :(得分:0)
您可以多次调用构造函数
Database.SetInitializer<BloggingContext >(new CreateDatabaseIfNotExists<BloggingContext>());
CreateDatabaseIfNotExists
只是检查数据库是否确实存在,如果不存在则创建它,否则它会跳过数据库创建部分!
答案 1 :(得分:0)
策略的名称并没有多大意义。 实际上,CreateDatabaseIfNotExists策略的作用是: