创建DbContext

简介:

上一篇介绍了《创建实体》,这一篇我们顺其自然地介绍《创建DbContext》。

温故:

提到DbContext,对于经常使用DbFirst模式的开发者来说已经再熟悉不过了,EntityFramework全靠这员大将。它的作用是代表与数据库连接的会话,提供了查询、状态跟踪、保存等功能。

还有一个重要的对象是DbSet,对实体类型提供了集合操作,比如Add、Attach、Remove。继承了DbQuery,所以可以提供查询功能。

知新:

ABP框架为我们创建了一个DbContext模板。这个模板就是我项目中基础设施层的ChargeStationDbContext.cs文件(当然,如果你的项目名称是XX,那么它的名字就是XXDbContext.cs),如下图:

image

开干:

双击打开这个文件开始编辑。

image

 

打开文件之后,发现有个todo提示,这个提示告诉我们“为你的实体们定义IDbset”。好,接下来,我们就在这个地方来定义以下代码。

复制代码
        public virtual IDbSet<Cities> Cities { set; get; }
        public virtual IDbSet<CoinsCollectionDataLogs> CoinsCollectionDataLogs { set; get; }
        public virtual IDbSet<DeviceCoinsRecords> DeviceCoinsRecords { set; get; }
        public virtual IDbSet<DeviceNoDataSets> DeviceNoDataSets { set; get; }
        public virtual IDbSet<MoneyBoxRecycleRecords> MoneyBoxRecycleRecord { set; get; }
        public virtual IDbSet<MonthEndReports> MonthEndReports { set; get; }
        public virtual IDbSet<Operators> Operators { set; get; }
        public virtual IDbSet<Orders> Orders { set; get; }
        public virtual IDbSet<Provinces> Provinces { set; get; }
        public virtual IDbSet<RefundOrders> RefundOrders { set; get; }
        public virtual IDbSet<Stations> Stations { set; get; }
        public virtual IDbSet<TerminalAlertLogs> TerminalAlertLogs { set; get; }
        public virtual IDbSet<TerminalDevices> TerminalDevices { set; get; }
        public virtual IDbSet<TerminalMaintainLogs> TerminalMaintainLogs { set; get; }
        public virtual IDbSet<TransDetails> TransDetails { set; get; }
复制代码

再次注意一下这里的提示“为你的实体们定义IDbset”,因为我的实体中还定义了Abp开头的一些Users和Roles等等,所以我在这里继续定义它们的IDbSet。定义之后,发

现报错,原话是这样的:“The key word ‘new’is required on ‘Roles’because it hides property IDbSet<TRole> AbpZeroDbContext<TTenant, TRole, TU

ser>”,翻译成人话就是说“父类中已经有这个属性了,如果你还要定义的话,就必须加一个new关键字来隐藏父类的同名属性”。可见,父类中已经定义了关于租户,用户和

角色等的属性,那么我们直接用就好了。来看看ABP module-Zero中的源码:

image

ABP已经帮我们做了这么多,这就是它强大之所在啊。因而,推断出这里我们不用再定义这些东西的IDbSet了,只需定义自己业务的实体,相应地,之前(上一篇)创建的这些实体也应该删除了。

 

好了,这里我们定义完了IDbSet,那么AbpZeroDbContext是怎么连接到数据库的呢?它的连接字符串在哪呢?

注意看该类的构造函数,它调用了父类的构造函数,并且将“Default”字符串传给父类的构造函数。实际上,这个字符串一直从AbpZeroDbContext类传给其父类AbpContext,再向上传给父类DbContex,用于数据库的连接使用。最后通过读取Web.Config中name属性的值为“Default”的连接字符串来连接数据库。

<connectionStrings>
    <add name="Default" connectionString="Server=localhost; Database=ChargeStation; Trusted_Connection=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

好了,今天的《创建DbContext》就说到这里,肚子饿了,该去做午饭了!下一篇我们聊《创建数据库迁移》,让我们一小步一小步地揭开ABP框架的神秘面纱,敬请关注!





本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/4925290.html,如需转载请自行联系原作者

目录
相关文章
|
JSON 数据格式
将Object类对象转为对应实体类对象
将Object类对象转为对应实体类对象
403 0
|
Python
5 类的创建及使用
5 类的创建及使用
107 0
|
Java 编译器
创建一个对象的时候
创建一个对象的时候
57 0
|
JavaScript 前端开发 Java
创建Class类的实例对象的三种方法
创建Class类的实例对象的三种方法
203 0
|
缓存 安全 Java
仅且仅创建一次对象
此篇算是对《voliatile,synchronized,cas》理论的一种实践
118 0
创建一个名为 MyMvcConfig 的配置类
创建一个名为 MyMvcConfig 的配置类
229 0
Session帮助类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace Test { /// /// Session 操作...
992 0
2-1 类的创建
创建一个简单的表示矩形的Rectangle类,满足以下条件: 1、定义两个成员变量height和width,表示矩形的长和宽,类型为整型 2、定义一个getArea方法,返回矩形的面积 3、定义一个getPerimeter...
1021 0