EF code first 创建和初始化数据库

1.前言 

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

2.建立对象

2.1建立对象

/// <summary>
    /// 缴费项目
    /// </summary>
    public class fee_item : feemodel
    {
       /// <summary>
    /// 缴费项目
    /// </summary>
    public class fee_item : feemodel
    {
        public fee_item()
        {
            type = feeItemType.Normal;//枚举类型初始化
        }

        [Required]
        [StringLength(16, MinimumLength = 2)]
        public string name { get; set; }//缴费类型
        [Required]
        [StringLength(16, MinimumLength = 2)]
        public string code { get; set; }
        public feeItemType type { get; set; }
        public bool State { get; set; }//是否启用
        public string Icon { get; set; }//显示图标
        public long sort { get; set; }
        public long appid { get; set; }
    }

        [Required]
        [StringLength(16, MinimumLength = 2)]
        public string name { get; set; }//缴费类型
        [Required]
        [StringLength(16, MinimumLength = 2)]
        public string code { get; set; }
        public feeItemType 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为对象赋默认值【可选择】

    public void Initialize(FeeDbContext context)
        {
              List<fee_item> fim = new List<fee_item>() {
                new fee_item(){name="电费",code="pow",type= feeItemType.Normal,State=true,Icon="img/jf_dianf.png",sort=0,appid=0,reg_time=DateTime.Now},
                new fee_item(){name="网费",code="net",type= feeItemType.Normal,State=true,Icon="img/jf_wangf.png",sort=1,appid=1,reg_time=DateTime.Now},
                new fee_item(){name="四六级",code="cet",type= feeItemType.Normal,State=true,Icon="img/jf_siliuj.png",sort=2,appid=2,reg_time=DateTime.Now},
                new fee_item(){name="报名费",code="pow",type= feeItemType.Normal,State=true,Icon="img/jf_baomingf.png",sort=3,appid=3,reg_time=DateTime.Now},
                new fee_item(){name="保险费",code="pow",type= feeItemType.Normal,State=false,Icon="img/jf_baox.png",sort=4,appid=4,reg_time=DateTime.Now},
                new fee_item(){name="住宿费",code="pow",type= feeItemType.Normal,State=true,Icon="img/jf_dianf.png",sort=5,appid=5,reg_time=DateTime.Now}
            };
            List<school_power> con_power = new List<school_power>() {
            new school_power(){oid=1,power_code="ykt",power_id="1",reg_time=DateTime.Now},
            new school_power(){oid=1,power_code="sims",power_id="2",reg_time=DateTime.Now}
            };
           fim.ForEach(o => context.fee_item.Add(o));
           context.SaveChanges();
        }

3.DBContext

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

        }
    }

4.EF Code First

4.1新增

public bool Build()
        {
            try
            {
                var context = new FeeDbContext();
                if (!context.Database.Exists())
                {
                    new List<IDataInitializer<FeeDbContext>>() {
                        new DataInit4dept()
                    }.Setup<FeeDbContext>(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;
            }
        }

4.2移除

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

4.3初始化

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

时间: 2024-08-08 13:56:33

EF code first 创建和初始化数据库的相关文章

code first 创建和初始化数据库

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

EF Code First学习笔记:数据库创建

控制数据库的位置 默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayContext. 有几种方法可以改变这种默认约定. 利用配置文件 在配置文件中新加一个连接字符串 <connectionStrings> <add name="BreakAwayContext" providerName="System.Data.SqlClient

Contoso 大学 - 使用 EF Code First 创建 MVC 应用,实例演练

Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Contoso 大学是虚构的.应用包括了类似学生注册.课程创建以及教师分配等功能. 这个系列教程展示了创建 Contoso 大学应用的步骤.你可以 下载完整 的程序,或者按照教程一步一步创建它,这个教程中使用 C# 进行演示,下载的代码中同时包含 C# 和 VB 实现.如果你有与这个教程没有直接相关的问题,可以张贴到 ASP.NET Entity Framework forum  或者

Contoso 大学 - 使用 EF Code First 创建 MVC 应用

Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Contoso 大学是虚构的.应用包括了类似学生注册.课程创建以及教师分配等功能. 这个系列教程展示了创建 Contoso 大学应用的步骤.你可以 下载完整 的程序,或者按照教程一步一步创建它,这个教程中使用 C# 进行演示,下载的代码中同时包含 C# 和 VB 实现.如果你有与这个教程没有直接相关的问题,可以张贴到 ASP.NET Entity Framework forum  或者 

EF Code First自定义数据库(服务器及数据库名)连接配置

EF Code First数据库连接配置 通过EF Code First创建新的数据库,默认的都是: 命名空间.Models.MovieDbContext之类的数据库文件,如果想用自定义的数据库名称,则可以用下面的方法: 1.1.首先必须建立好Model文件 Models中Movie.cs 1 using System; 2 using System.ComponentModel.DataAnnotations; 3 using System.Data.Entity; 4 5 namespace

EF Code First数据库连接配置

前面几节,使用的都是通过EF Code First创建的新数据库,接下来,将开始使用已存在的数据库. 1.使用配置文件设置数据库连接 App.config 数据库连接字符串的name与Data中NorthwindContext.cs类名相同 <?xml version="1.0" encoding="utf-8"?><configuration>  <configSections>    <!-- For more info

EF Code First Migrations数据库迁移

http://www.cnblogs.com/libingql/p/3330880.html 1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramework. PM> Install-Package EntityFramework 安装成功后,界面提示如下图: 在新建的Portal控制台应用程序中添加两个实体类,代码结构如下: 其中,类文件PortalCo

【EF】EF Code First Migrations数据库迁移

1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramework. PM> Install-Package EntityFramework 安装成功后,界面提示如下图: 在新建的Portal控制台应用程序中添加两个实体类,代码结构如下: 其中,类文件PortalContext.cs的代码如下: using System; using System.Colle

使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移

本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public class Person { public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 在Controls文件夹内创建PersonControlle