code first 创建和初始化数据库

1.前言 

 Code First是Entity Framework提供的一种新的编程模型。通过Code First我们可以在还没有建立数据库的情况下就开始编码,然后通过代码对象来生成数据库。当然我们在实际开发过程当中要做单元测试。进而每次测试的时候 要对库进行初始化,这样就不会因上次测试而对本次测试有所影响。下面是具体的实现。

2.建立对象

2.1建立对象

    /// <summary>
    /// model对象
    /// </summary>
    public class model_item : supermodel
    {
        public model_item()
        {
            type = ItemType.Normal;//枚举类型初始化
        }

        [Required]
        [StringLength(16, MinimumLength = 2)]
        public string name { get; set; }
        [Required]
        [StringLength(16, MinimumLength = 2)]
        public string code { get; set; }
        public ItemType type { get; set; }
        public bool State { get; set; }
        public string Icon { get; set; }
        public long sort { get; set; }
        public long appid { get; set; }
    }

2.2.DBContext

public class GDG_DbContext : DbContext
    {
        public GDG_DbContext() : base("GDG_DbContext") { }
        public DbSet<model_item> model_item { get; set; }
       protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
         
        }
    }

2.3为对象赋默认值【可选择】

public class DataInit : IDataInitializer<GDG_DbContext>
    {

    public void Initialize(GDG_DbContext context)
          {
              List<model_item> fim = new List<model_item>() { 
                new model_item(){name="郭德纲",code="gdg",type= ItemType.Normal,State=true,Icon="taoxin.png",sort=0,appid=0,reg_time=DateTime.Now},
                new model_item(){name="于谦",code="yq",type= ItemType.Normal,State=true,Icon="juanmao.png",sort=1,appid=1,reg_time=DateTime.Now},
                new model_item(){name="德云社",code="dys",type= ItemType.Normal,State=true,Icon="yun.png",sort=2,appid=2,reg_time=DateTime.Now},
           };
           fim.ForEach(o => context.model_item.Add(o));
           context.SaveChanges();
        }
}

3.EF Code First

3.1新增

public bool Build()
        {
            try
            {
                var context = new FeeDbContext();
                if (!context.Database.Exists())
                {
                    new List<IDataInitializer<GDG_DbContext>>() { 
                        new DataInit()
                    }.Setup<GDG_DbContext>(context);
                    return true;
                }
                return false;
            }
            catch (DbEntityValidationException ex)
            {
                StringBuilder error = new StringBuilder();
                foreach (var item in ex.EntityValidationErrors)
                {
                    foreach (var item2 in item.ValidationErrors)
                    {
                        error.Append(string.Format("{0}:{1}\r\n", item2.PropertyName, item2.ErrorMessage));
                    }
                }
                Console.WriteLine("数据库初始化报错:" + error);
                throw ex;
            }
            catch (Exception e)
            {
                Console.WriteLine("数据库初始化报错:" + e.Message);
                throw e;
            }
        }

3.2移除

public bool Remove()
        {
            var context = new GDG_DbContext();
            try
            {
                if (context.Database.Exists())
                {
                    return context.Database.Delete();
                }
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine("数据库初始化报错:" + e.Message);
                return false;
            }
            finally { context.Dispose(); }
        }

3.3初始化

public bool Rebuild()
        {
            return Remove() && Build();
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

用golang写的golang解析json数据的包

gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据 安装 go get github.com/widuu/gojs...

34111
来自专栏草根专栏

asp.net web api 2.2 基础框架(带例子)

简介 这个是我自己编写的asp.net web api 2.2的基础框架,使用了Entity Framework 6.2(beta)作为ORM。 该模板主要采用...

4639
来自专栏GreenLeaves

C# 委托进阶

本文参考自:https://wenku.baidu.com/view/41ab91d3c1c708a1284a44d7.html?qq-pf-to=pcqq.c...

1886
来自专栏晓晨的专栏

C# 获取文件MD5值的方法

1023
来自专栏博客园

WPF Binding学习(四) 绑定各种数据源

在这里我们使用了ListView控件和GridView控件来显示数据,这两个控件从表面来看应该属于同一级别的控件。实际上并非如此!ListView是ListBo...

1223
来自专栏跟着阿笨一起玩NET

C#快速剔除字符串中不合法的文件名或者文件路径字符

1074
来自专栏jessetalks

async & await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是asyn...

32911
来自专栏飞扬的花生

C#中返回值封装

      在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类:...

19710
来自专栏丑胖侠

《Drools7.0.0.Final规则引擎教程》番外实例篇——FactHandler使用案例

背景 在使用具体的业务使用中,我们经常会通代码对Fact对象进行操作,Drools为我们提供了FactHandler来获取对象的句柄,通过此返回值可以对Work...

2225
来自专栏菩提树下的杨过

WebService又一个不爽的地方

昨天在做项目时,发现了WebService又一个不人性化的地方,记录于此,希望能帮到遇到类似问题的同学们。 很多大型b/s项目,通常会分成几层,为了重现问题,这...

1928

扫码关注云+社区