vb.net动态建库之CodeFirst

 【EF简析】 

      ADO.NET EntityFramework是微软以ADO.NET为基础发展出来的对象关系对应(O/R Mapping)解决方案,现已经包含在visual  studio中,可直接添加引用使用即可。对于,CodeFirst、DBFirst与ModelFirst,都是EF旗下封装好的模式,现简单分析,主要了解其新的开发模式codefirst.

【概念解析】

   DatabaseFirst是基于已存在的数据库,利用某些工具(如VS提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。也就是从一个数据库开始,然后生成实体框架和相应代码。

      Model First是先利用某些工具(如VSEF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。

        平时我们添加的ADO数据模型,如果选择空数据模型则就是Model First,通过自己设计实体生成更新数据库的sql语句,在数据库中通过执行sql脚本生成相应的数据库;相反,如果我们选择从数据库连接,则是database first,基于已经存在的数据库,映射到代码中,通过上下文的形式对表进行操作。

    Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

【实战分析】

          [需求分析]

    在高校云平台权限注册中设计到一个动态建库:什么意思呢?——指一所学校(比如廊坊师范学院)在我系统中注册,当它注册完后,我就要给廊坊师范动态创建一个库出来,那个这个过程就要设计到code first建库,并默认向新库中添加数据。

    [具体实现]

    具体实施方案如下:

    1·手写codefirst代码:就是说你想生成什么样的库,包括库中几张表,表中具体需要什么字段,都可以通过代码编写完成,然后我们通过EF下的codefirst就可以自动生成你想要的数据库,但是,手写代码自然效率低且失误率高,所以,我们可以通过Entity Framework Power Tools Bata 4 插件帮助我们完成这项工作。再次强调:利用codefirst建库,是基于已经存在代码的基础上,才动态建库的。

具体步骤如下:(该步骤是利用模板数据库生成codefirst代码的一个过程)

    (1)在VS ——>工具——>扩展和更新,联机搜索:Entity Framework Power Tools Bata 4 ,即可。

vb.net动态建库之CodeFirst_第1张图片

     (2)安装好后,在你的类库上右击,进行如下操作:

vb.net动态建库之CodeFirst_第2张图片

    (3)接下来的步骤我们应该很熟悉:类似于添加ADO.NET 的数据模型,连接数据库,选择模板数据库即可,最后codefirst代码就生成了。

     (4)然后接下来的工作才是利用codefirst代码动态建库的过程。

    其实动态建库听起来特别神秘,其实就是一句话的事。首先在EF的上下文类中更改构造函数为数据库连接字符串,否则默认从配置文件中读取。代码如下:

 //更改构造函数
        public authoryContext(string connection)
            : base(connection)
        {
            this.Database.CreateIfNotExists();
        }
    (5)在main函数中添加如下代码:

static void Main(string[] args)
        {
            string DbName = "authory1234";//动态建库的数据库名称
            string connection = "Data Source=.; User=sa;Password=123456;Initial Catalog=" + DbName + ";Integrated Security=True";

        }
    (6)到此为止,数据库中就多了一个库。

     vb.net动态建库之CodeFirst_第3张图片

    (7)数据库建好以后,向新建库中默认添加数据,代码如下:

using (var db = new authoryContext(connection))
            { 
                //向数据库添加记录

                var cources = new Cours() { Id = 6, Name = "数学"};
                db.Courses.Add(cources);
                var scores = new Score() { Id =6, Student_Id =007, Course_Id =6 };
                db.Scores.Add(scores);
                var students = new Student() { Id=007,Name="贾丽敏"};
                db.Students.Add(students);
                //保存记录,返回受影响的行数
                int records = db.SaveChanges();
                Console.WriteLine("追加{0}记录成功!",records);
                Console.ReadLine();
            }

(8)输出结果:

vb.net动态建库之CodeFirst_第4张图片


    动态建库和添加默认数据已完毕,有兴趣的我们可以一起交流学习。



    


你可能感兴趣的:(vb.net动态建库之CodeFirst)