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中配置链接字符串

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/tanl/p/10615918.html
Copyright © 2011-2022 走看看