Understand CreateDatabaseIfNotExists

本文关键字:CreateDatabaseIfNotExists Understand | 更新日期: 2023-09-27 17:58:46

假设我们有两个域类。

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=新的Blogging上下文())

它再次调用了构造函数,我不确定它是否正常。

Understand CreateDatabaseIfNotExists

您可以随意调用的构造函数

Database.SetInitializer<BloggingContext >(new CreateDatabaseIfNotExists<BloggingContext>());

CreateDatabaseIfNotExists只是做一个DB检查,看看它是否真的存在,如果不存在,它会创建它,否则它会跳过数据库创建部分!

策略的名称实际上没有意义。实际上,CreateDatabaseIfNotExists策略的作用是:

  1. 检查具有指定名称的数据库是否存在,如果不存在它将创建一个新的数据库
  2. 如果具有指定名称的数据库已经存在,并且在数据库中根本找不到表/proc,这意味着数据库在"全新"状态下,策略也将生成数据库构造和插入种子数据
  3. 如果具有指定名称的数据库已经存在,并且数据库中的一些表/proc,则它将不起任何作用
相关文章:
  • 没有找到相关文章