EF CodeFirst学习笔记1

时间:2021-06-11 08:52:45

一直使用EF的DBFirst没使用过CodeFirst,而且CodeFirst使用的人又多,虽然麻烦点但是还是要学下的。

来写个一使用的入门教程

新建一个codefirst的demo,需引入EntityFramework

EF CodeFirst学习笔记1

然后简单建立一模型 这边以Table特性命名Emp,默认如果不加此特性约定是以s结尾如Emps生成表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace EFcodefirstdemo.model
{
    [Table("Emp")]
    public class Emp
    {
        [Key]
        public string empid { get; set; }
        public string empname { get; set; }
        public int? age { get; set; }
        public string depid { get; set; }
        public string tel { get; set; }
    }
}

接着建立上下文 我们自己建立的oaDbContext要继承DbContext,并且以刚才建立的模型的泛型类建立一个DbSet<T>属性.注意,每个模型都必须在DbContext中定义一个对应的DbSet<T>属性。在DbContext中创建字符串连接构造函数,我们以name=""指定我们在配置文件中的连接字符串。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Configuration;

namespace EFcodefirstdemo.model
{
    public class oaDbContext:DbContext
    {
        public oaDbContext()
            : base("name=MyStrConn")
        {
            //策略一:数据库不存在时重新创建数据库
            //Database.SetInitializer<oaDbContext>(new CreateDatabaseIfNotExists<oaDbContext>());
            //策略二:每次启动应用程序时创建数据库
            //Database.SetInitializer<oaDbContext>(new DropCreateDatabaseAlways<oaDbContext>());
            //策略三:模型更改时重新创建数据库
            Database.SetInitializer<oaDbContext>(new DropCreateDatabaseIfModelChanges<oaDbContext>());
            //策略四:从不创建数据库
            //Database.SetInitializer<oaDbContext>(null);
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //throw new UnintentionalCodeFirstException();
        }

        public DbSet<Emp> Emps { get; set; }
    }
}

配置下数据连接字符串 App.Config中connectionStrings节点中增加

    <add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=testdb;Integrated Security=True;user id=sa;password=123;"/>

执行看下效果

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using EFcodefirstdemo.model;

namespace EFcodefirstdemo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (var db = new oaDbContext())
                {
                    Emp model = new Emp();
                    model.empid = "001";
                    model.empname = "tony";
                    model.age = 10;
                    model.depid = "IT";
                    model.tel = "123";
                    db.Emps.Add(model);
                    db.SaveChanges();
                }
            }
            catch (Exception e)
            {
            }
            Console.ReadKey();
        }
    }
}

这样我们数据库中就增加了一个testdb的数据库而且里面有表Emp已经插入了刚才的一条数据

EF CodeFirst学习笔记1

EF CodeFirst学习笔记1

这就是简单的CodeFirst的实现方法.