zoukankan      html  css  js  c++  java
  • EF-CodeFirst模式的简单使用

    要求:

    引用EntityFramework

    SqlServer数据库

     一个C#项目

    项目结构:

    将实体模型映射到数据库,只需要在下面三个地方进行配置、

    实体类(数据库映射)

    DbContext上下文(存储库)

    数据库连接字符串配置

    1、实体类(数据库映射)

    每个数据库对象在程序中都有一个类可以对应。
    需要的了解的知识:类和数据库映射相关的知识。
    例子:
    一个数据库映射类

    public class TModel
    {
        [Key]//标记主键
        public int ID{get;set;}
    
        public string Name{get;set;}
    
        [NotMap]//因为直接把Model和数据库映射Model作为同一个,所以存在部分差异,这个字段不需要保存,所以配置为不映射到数据库
        public string ShowInfo{get;set;}
    }

    2、实现 DbContext

    DBContext 实现了工作单元模式和存储库模式,也就是说这个可以代替一个表一个Repository的方式,直接在DbContext中定义表结构就可以直接使用了。

    数据库生成功能就是在该类中实现。
    工作单元模式:对象可以在程序中更改,等到SaveChange 时才保存到数据库。
    把一系列业务对象的持久化由工作单元实现类统一在一个类管理,而不用为每个数据库对象建一个仓储层。

    例子:
    定义一个上下文。

    public class TestContext : System.Data.Entity.DbContext
    {
        public TestContext() : base("LogStr")//LogStr为web.config中的链接字符串。有多种设置链接的方式。
        {
            //设置初始化方式,可以使用的策略类有:
            //CreateDatabaseIfNotExists 如果不存在数据库,建立数据库;
            //DropCreateDatabaseAlways 总是重建数据库;
            //DropCreateDatabaseIfModelChanges 如果定义的模型发生改变,重建数据库。
            //不设置该项,当模型发生改变时,查询时会报错。当数据库不存在时,创建数据库
                Database.SetInitializer(new CreateDatabaseIfNotExists<TestContext>());
      }
    
       //使用属性的方式-映射的数据表对象
      public DbSet<TModel> TModels { get; set; }
        
       //自定义映射关系,可省略,常用于各种骚操作,一个发挥想象力的地方。
       protected override void OnModelCreating(DbModelBuilder modelBuilder)
       {
        //常见的操作
        //1、以反射的信息添加表,如某一程序集中的类,动态添加映射到数据库中,可以不使用属性。
        //2、自定义映射模式,如外键关系等映射模式,属性名和表名的映射关系。
       }
    } 
    

      

    例子:
    手动重建数据库。

    using (TestContext logContext = new TestContext())
    {
      logContext.Database.Initialize(true);
    }

    3、Web.Config或App.config中配置链接字符串

  • 相关阅读:
    可爱精灵宝贝 DP/爆搜
    那些年留的坑
    吃某种零食ing
    NOIP模拟测试13
    NOIP模拟测试12
    NOIP模拟测试11
    大佬 (数学)
    BZOJ3331 BZOJ2013 压力
    LOJ2586 APIO2018 选圆圈
    BZOJ3398 牡牛和牝牛
  • 原文地址:https://www.cnblogs.com/tanl/p/10615918.html
Copyright © 2011-2022 走看看