返回总目录《一步一步使用ABP框架搭建正式项目系列教程》


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

温故:

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

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

知新:

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

开干:

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

打开文件之后,发现有个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中的源码:

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框架的神秘面纱,敬请关注!

创建DbContext的更多相关文章

  1. EntityFramework Core 1.1是如何创建DbContext实例的呢?

    前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起. 显式创建DbContext实例 通过带OnConfiguri ...

  2. 第五章:创建DbContext

    一.DbContext介绍 DbContext是Entity Framework(EF)操作数据库的上下文网关(接口).我们对数据库的所有操作都是通过DbContext完成的.下面我们将讨论在code ...

  3. [.NET Core] - 使用 EF Core 的 Scaffold-DbContext 脚手架命令创建 DbContext

    Scaffold-DbContext 命令 参数 Scaffold-DbContext [-Connection] <String> [-Provider] <String> ...

  4. .NET Core之Entity Framework Core 你如何创建 DbContext

    本文版权归博客园和作者吴双共同所有,欢迎转载,转载和爬虫请注明博客园蜗牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html. 目前国内各大论坛,各位大牛的分 ...

  5. [转].NET Core之Entity Framework Core 你如何创建 DbContext

    本文转自:http://www.cnblogs.com/tdws/p/5874212.html 本文版权归博客园和作者吴双共同所有,欢迎转载,转载和爬虫请注明博客园蜗牛原文地址 http://www. ...

  6. 非构造函数方式创建DbContext实例的方法

    using Microsoft.EntityFrameworkCore;using Microsoft.EntityFrameworkCore.Design;using Microsoft.Entit ...

  7. EF Core 快速上手——创建应用的DbContext

    系列文章 EF Core 快速上手--EF Core 入门 EF Core 快速上手--EF Core的三种主要关系类型 本节导航 定义应用的DbContext 创建DbContext的一个实例 创建 ...

  8. Asp.Net Core中创建多DbContext并迁移到数据库

    在我们的项目中我们有时候需要在我们的项目中创建DbContext,而且这些DbContext之间有明显的界限,比如系统中两个DbContext一个是和整个数据库的权限相关的内容而另外一个DbConte ...

  9. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

随机推荐

  1. 【.net 深呼吸】序列化中的“引用保留”

    假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...

  2. AndroidTips-052:.aar文件依赖

    aar aar 文件是android 类库项目的输出文件,其中可以包含普通的.class,清单,以及android项目特有的资源文件. 使用方式 将.aar文件放在在自己项目的libs目录下 在gra ...

  3. C语言 · 最大值与最小值计算

    输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0   #include<stdio.h> int main(){ ]; ...

  4. 【开源】.net 分布式架构之监控平台

    开源地址:http://git.oschina.net/chejiangyi/Dyd.BaseService.Monitor .net 简单监控平台,用于集群的性能监控,应用耗时监控管理,统一日志管理 ...

  5. Xamarin与Visual stuido2015离线安装包分享

    最近看见大伙留言才知道国内安装Xamarin开发原来这么艰辛啊! 第一:网速不快 第二:Android SDK下载受限 等等... 鉴于这些原因,特写下这篇文章以及分享打包好的离线包以帮助大家尽快体验 ...

  6. 微框架spark--api开发利器

    spark简介 Spark(注意不要同Apache Spark混淆)的设计初衷是,可以简单容易地创建REST API或Web应用程序.它是一个灵活.简洁的框架,大小只有1MB.Spark允许用户自己选 ...

  7. 玩转spring boot——结合redis

    一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...

  8. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  9. iOS UITableView 与 UITableViewController

    很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...

  10. python之类介绍

    python对象销毁(垃圾回收): 1>同Java语言一样,python使用了引用计数这一简单计数来追踪内存中的对象,也就是说,python内部记录着所有使用中的对象各有多少引用,一个内部跟踪变 ...