码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2016-04-21 20:28:13      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

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; }
    }
View Code

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();
        }
View Code

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>();
         
        }
    }
View Code

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;
            }
        }
View Code

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(); }
        }
View Code

4.3初始化

技术分享
 public bool Rebuild()
        {
            return Remove() && Build();
        }
View Code

 

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

标签:

原文地址:http://www.cnblogs.com/kmonkeywyl/p/5418339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!