EF6进修条记一:code-first简朴建立数据库、表的一


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

 

我的EF进修条记是依照 汪鹏(网名Jeffcky) 大侠《你必需控制的Entity Framework 6.x与Core 2.0》来弄的。

这也是我第一篇博客,以为这器械不克不及乱写啊,算了,干吧。

EF我之前是做过的,然则只是一些细碎的器械,不成体系。

EF是甚么呢?ORM框架object renational mapping 工具干系映照,下面我就用本身的话来了。

数据库内里寄存数据用表,而我们顺序代码运用类,一个是数据天下的玩法,一个是工具天下的玩法。EF就是为我们做这类工具映照的处置惩罚,让我可以或许不消体贴数据库,只干系类 怎样设想就好了。

我说完了。它重要就是这个对吧,固然会有其他的许多器械,经由过程顺序直接建立数据库,然后更多的精神放到了类上,营业逻辑上,倏忽多出来的精神没处使,是否是就弄出了甚么范畴驱动设想?

 

如今来建立一个控制台顺序,装置EF,翻开顺序包治理控制台输入敕令:install-package entityframework 

建立Blog类,写一个EFDbContext类,这个类派生自DbContext,为blog公然一个DbSet属性

然后在main要领内里实例化高低文工具,增加一个blog实例,接着查询这个实例,打印出来

然后控制台也许过了十多秒,看到了方才增加的数据,那末简朴的建立数据库、表就完了~

namespace _20190105
{
    public class Blog
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Url { get; set; }
        public DateTime? CreatedTime { get; set; }
        public double Double { get; set; }
        public float Float { get; set; }
        
    }
}

  

namespace _20190105
{
    //  此高低文是与数据库交互的一个中央桥梁,可以或许称之为会话,为每个模子公然一个DbSet<>,界说DbSet有三种体式格局
    public class EFDbContext:DbContext
    {
        // DbSet 三种设想体式格局,不太懂,我随意弄了一种
        //public DbSet<Blog> Blog { get; set; }
        //public IDbSet<Blog> Blog { get; set; }
        public DbSet<Blog> Blog {
            get { return Set<Blog>(); }
        }
    }
}

  

namespace _20190105
{
    class Program
    {
        static void Main(string[] args)
        {
            //  高低文实例化,增加一个blog实例
            using (EFDbContext db = new EFDbContext())
            {
                db.Blog.Add(new Blog
                {
                    CreatedTime = DateTime.Now,
                    Double = 11.11,
                    Float = 2.2f,
                    ID = 1,
                    Name = "第er篇博客",
                    Url = "http://localhost:8080"
                });
                db.SaveChanges();

                Console.WriteLine(JsonConvert.SerializeObject(db.Blog.ToList()));
            }
        }
    }
}

  

 

 

 

 

来看看数据库,对照着模子看一下,数据库和表是甚么模样的。这里要注意一点,如果是依照上面的几步操纵,EF默许会给我们把数据库建立到localdb内里

localdb是个甚么玩意,他也是个数据库,然则这和我们SQL server数据库治理工具建立的数据库有甚么不一样呢?网上说这个localdb完全是为了针对开发人员运用的,一个数据库最大容量为10G,那他究竟是在装置VS的时刻装置的,照样在装SQLserver装置的呢?

要检察方才建立的数据库,在VS上点击“视图”-->"SQL server数据库工具资源治理器",也可以或许经由过程SQL server去衔接它

 

 

经由过程SQL server治理工具衔接到这个localdb,有可以或许你的机械上没有装置这个localdb,我这个没有锐意去装置,横竖就是有这个器械

起首,数据库建立在localdb内里,数据库的名称是我们项目定名空间 高低文类名

然后我们看表名,我们的DbSet<>属性是Blog,然则在数据库内里注解成了Blogs,酿成复数情势了

然后我们看字段,ID默许给我弄成了主键,而且设置为自增进

string范例对应nvarchar(max),而且许可为空

double范例对应float

float范例对应real

datetime?可空范例对应datetime,可空

 

方才我增加一个条数据,ID为1,如今我又增加一个blog实例,ID照样1,然则没有报错,准确插进去进去了,ID自增进为2

 

 

然后我在Blog中增加一个字段Test,再次运转,报错

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

未经处置惩罚的非常:  System.InvalidOperationException: The model backing the 'EFDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

他说模子放生了转变,让我用codefirst 迁徙来更新数据库    行,然后我在顺序包治理器控制台输入 add-migration jinshantest,报错 No migrations configuration type was found in the assembly '20190105'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

他说没有在顺序集合发明迁徙设置装备摆设范例,可以或许运用enable-migrations增加设置装备摆设

就是说要用这个迁徙,要先实行 enable-migrations 敕令来开启一下迁徙,这些敕令不辨别大小写

我实行了敕令:enable-migrations 发明我的项目中被建立了一个Migrations文件夹,内里有两个文件

 

然则我并没有看到方才增加的谁人Test属性,先不论,我们直接更新看看
输入敕令:update-database

 

然后他说没有挂起的显现迁徙,甚么意思,不就是说没甚么可以或许更新的吗?

然后我再次天生一个新的迁徙类文件,输入敕令:add-magration jinshantest  这个jinshantest就是你为这个迁徙文件取的一个名字

 

如今就有了。

那末如今就更新到数据库内里吧,如今我们再来实行迁徙:update-database -verbose   加上-verbose就是显现迁徙的详细信息

可以或许看到它依据迁徙文件的内容,天生了建立列的SQL语句,并更新到了数据库

 

 

 我如今又想到,我再增加一个字段“Test2”而且设置为非空,看看它能不克不及给我更新到数据库,更新以后是甚么模样,这需求很正常吧

 

改动了模子就要做数据迁徙,继承add-migration jinshantest2 天生迁徙文件

可以或许的,他天生的SQL语句是下面如许的。

ALTER TABLE [dbo].[Blogs] ADD [Test2] [nvarchar](max) NOT NULL DEFAULT ''

 

 

 

如今我想要EF面向我的SQL server 而不是localDB 那末我需要在app.config文件中加上数据库衔接字符串的设置装备摆设,他要其他的我也不会去配,由于Code-first不就是不消随处配器械,直接写代码就行吗? Initial Catlog=TestDB,这个TestDB在我数据库内里不存在,我固然不会弄一个已存在的数据库,我的目标就是要让它给我建立数据库  

然后修正我们的Dbcontext文件,通知EF我们的数据库衔接字符串

因而我运转顺序,报错了:找不到工具“dbo.Blogs”

我搜检我的的SQL server 内里甚么都没有。

岂非是由于我Main要领里有做数据耐久化的代码,他在插进去数据的时刻找不到表,就报错了?

方才在localDB内里不是好好的吗?在对localDB操纵的时刻,我甚么都没做,他自动给我建立数据库,建立表

岂非我如今还要在SQL server中建立一个数据库然后建立一个表?那要你做甚么?

行,我弄了下,也许知道了,我要先做数据迁徙才行,就是把方才的那些迁徙文件如今针对我的SQL server实行,因而敕令行输入:update-database -verbose

行了,数据库和表都有了。

 SQLserver 和localDB就是这一点区分,localDB不消先迁徙。

背面另有其他的许多设置装备摆设,不外总算是可以或许简朴地建立数据库和表了,而且修正model后,我们应用数据迁徙对数据库做更新,照样对照完全吧。

书中的内容都是一点点讲起的,数据迁徙在背面才会讲到。书有目次啊,必需随着目次走啊。我本身随意弄,照样以为要用一个完全的器械把这些散碎的器械串起来好一些。

 

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。