创建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,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
SQL 开发框架 缓存
【Entity Framework】 EF中DbContext类详解
【Entity Framework】 EF中DbContext类详解
76 0
|
设计模式 Python
我为什么要创建一个不能被实例化的类
我为什么要创建一个不能被实例化的类
69 0
|
Python
5 类的创建及使用
5 类的创建及使用
123 0
|
Java 编译器
创建一个对象的时候
创建一个对象的时候
74 0
60usebean创建实例对象
60usebean创建实例对象
75 0
60usebean创建实例对象
|
JavaScript 前端开发 开发者
class-创建类并通过 constructor 挂载实例属性|学习笔记
快速学习 class-创建类并通过 constructor 挂载实例属性
218 0
|
JavaScript 前端开发 Java
创建Class类的实例对象的三种方法
创建Class类的实例对象的三种方法
244 0
|
缓存 安全 Java
仅且仅创建一次对象
此篇算是对《voliatile,synchronized,cas》理论的一种实践
143 0
VBS基础篇 - 对象(1) - Class对象
VBS基础篇 - 对象(1) - Class对象       相信对JAVA有一定了解的朋友一定对类这个名词不陌生,但是大家可能没有想过在VBS中使用Class类吧,其实Class类在自动化测试中是相当常用的,对于代码量增大时,类的结构化就充分体现出了它强大的优势,下面我们就来看一下类的组成部分以及一些用法。
1229 0
Session帮助类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace Test { /// /// Session 操作...
1008 0