语言的抽象 多出来的对事务、连接池、迁移、种子数据等一些功能 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好 Repository 仓储 在领域层和数据映射层之间,像一个内存级别的领域对象集合 为领域业务的单元测试提供替换点...工作单元) DB Set(Repository 仓储) EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的 ORM 框架 EF Core快速开始示例 创建一个空的...web api 项目 添加 Pomelo.EntityFrameworkCore.Mysql 的 nuget 包引用 创建实体 创建 DbContext 配置连接字符串并且注入 DbContext 使用... Projects { get; set; } public DbSet Members { get; set; }...public DbSet Assistants { get; set; } public DbSet<Project.ProjectGroup
知道哪些类型包含在当前模型中,因此,我们需要自定义一个ZdyNameDbContext,并继承DbContext,并在自定义DbContext中暴露需要暴露的类型,这样在Code First开发模式中,...就可以使用 context(数据库上下文),使用这些预先暴露的DbSet类型,具体的代码如下: public class EFStudyDbContext:DbContext {...//暴露City的DbSet类型的属性 public DbSet Citys { get; set; } //暴露Town的DbSet类型的属性...关联实体的主键名 (3)、关联实体的主键名 注: (1)、当外键关系被检测到,Code First会根据外键的可空性来推断关系的具体形式;如果外键属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的.... (2)、当关联实体的外键属性被设置为不为空,Code First会设置级联删除,反之不会。
搭建完sonarqube6.1之后,按照网上找到的命令执行:mvn clean install mvn sonar:sonar,打开sonarqube网页查看结果时却发现一个奇怪的现象: 覆盖率为0
class MyContext : DbContext { public DbSet Blogs { get; set; } protected override void...Fluent API [Ignore] 排除实体和属性 class MyContext : DbContext { public DbSet Blogs { get; set; }...Fluent API class MyContext : DbContext { public DbSet Blogs { get; set; } public DbSet空不可空的控制。那么在EF CORE中,我们怎么实现这些关系呢?...以下内容用代码的方式给出了一对一,一对多和多对多的关系,两边关系设为不可空。其实可空不可空的控制十分简单,只要注意是否需要加上IsRequired的扩展Api即可。
TEntity entityToDelete); void Update(TEntity entityToUpdate); void Save(); } 非泛型空接口...options.UseMySql(Configuration.GetConnectionString("DefaultConnection"))); 翻遍了EF的AddDBContext的重载,也没发现可以注册为DBContext...我就再把XXDBContext注册为DBContext,无非控制下生命周期就成,具体实现如下: services.AddDbContext(options =>...Context; protected DbSet DbSet; public Repository(DbContext context)...AsImplementedInterfaces() .InstancePerLifetimeScope(); } } 大家注意看红色部分,这就是之前定义那个空IRepository
单例的MongoClient 基于MongoDB的最佳时间,对于MongoClient最好设置为单例注入,因为在MongoDB.Driver中MongoClient已经被设计为线程安全可以被多线程共享,...(entity); else await _dbContext.AddCommandAsync(async (session) => await _dbSet.InsertOneAsync...(filter); await _dbContext.AddCommandAsync(async (session) => await _dbSet.DeleteManyAsync(filter...(expression); await _dbContext.AddCommandAsync(async (session) => await _dbSet.DeleteManyAsync...(filter, updatefilter); await _dbContext.AddCommandAsync(async (session) => await _dbSet.UpdateManyAsync
当Code First发现不能推断出类的主键,并且没有通过Data Annotations或Fluent API注册主键,那么该类型将被自动注册为复杂类型。...()); } public DbSet Users { get; set; } } 创建完DbContext类后,我们编写将数据存入数据库的方法:...,应该在实体的构造函数中初始化复杂类型; 将制度属性添加到复杂类型中时,需进行空值检查; 尽量显式注册复杂类型。...入口点是 DbContext的Entry方法,返回对象类型是 DbEntityEntry 。...:即使查询出的数据为空,EF Code First 依然会初始化复杂类型对象; 无法延迟加载。
的类 internal class MyDbContext: DbContext { public DbSet Books { get; set; } protected override...修改表结构 想要限制Title的最大长度为50,Title字段设置为“不可为空”,并且想增加一个不可为空且最大长度为20的AuthorName(作者名字)属性。...(book); await dbContext.SaveChangesAsync(); } } 查询数据 DbSet实现了IEnumerable接口,因此可以对DbSet...(); 2、删除也是先把要修改的数据查询出来,然后再调用DbSet或者DbContext的Remove方法把对象删除,然后再执行SaveChangesAsync()保存修改。...中的对应的DbSet的 属性名。
这在开发周期的早期阶段通常很有用(比如设计领域实体时),从单元测试的角度也很有用。...Students { get; set; } 22 } 23 } 这样一来,无论什么时候创建上下文类,Database.SetInitializer()方法都会被调用,并且将数据库初始化策略设置为DropCreateDatabaseIfModelChanges...AppConnection") { Database.SetInitializer(null); } 2、填充种子数据 到目前为止,无论我们选择哪种策略初始化数据库,生成的数据库都是一个空的数据库...此外,开发阶段可能想以admin的资格为其填充一些数据,或者为了测试应用在特定的场景中表现如何,想要伪造一些数据。...这里值得注意的是我们并没有调用DbContext.SaveChanges()方法,因为它会在基类中自动调用。
在模板中选择 MVC,如果编写了应用的单元测试,请先做检查,并点击 OK。 我们的工程都是用基本的功能创建的。现在,我们开始创建数据库上下文类,这个类将会被 Data Access 实体框架使用。...我们将在数据库上下文中为 Asset 表添加一个属性,这个属性将会成为 Asset 表的实体框架表示,用它来创建脚本。...return new ApplicationDbContext(); } } 以上是 ASP.NET identity 2.0 的默认实体框架设置,我们通过为 Asset 表添加新的 DbSet...现在,在控制器文件夹中添加一个空的名为 AssetController 的控制器,这个控制器件将用于所有 Asset 的相关工作。...HTML 实现渲染的代码,请为检索行为创建一个空模板(没有模型)的视图,然后在其中添加如下代码: @model IEnumerable <div
笔者版本 ASP.NET Core 版本为 2.1 ,选择的 NuGet 包版本为 2.11。 如果你的 .Net Core 是最新的,那么 NuGet 也选最新的即可。...这里的构造函数内容为空,因为暂时没有什么要配置的。 步骤3 在构造函数下面加上代码,对模型类进行映射。...public DbSet Uaa { get; set; } //Dbset 映射成一个表 //Dbset 里面的Users即为使用的模型类 //Uaa Users...类在数据库生成的名称 注: 上面代码表示以模型类Users为基础,在数据库中生成 名为 Uaa 的 表。...注: [Required] 表示该项不能为空 [Required(ErrorMessage ="不能为空")] ErrorMessage ="" 就是不按此要求填写,会出现额提示 [RegularExpression
/LearnEf.Data 看一下迁移文件: 是空的, 因为我之前已经使用UI那个项目进行过迁移更新了....如果针对Owner想让Company是可空的, 那么CompanyId的类型就应该设置成int?....DbContext只能删除它追踪的model....非常简单, 从log可以看到, 删除动作只用到了主键: 如果是删除的离线model, 那么Remove方法首先会让Dbcontext追踪这个model, 然后设置状态为Deleted....Raw SQL查询/命令: 这部分请看文档: 命令: DbContext.Database.ExecuteSqlCommand(); 查询: DbSet.FromSql() https://docs.microsoft.com
在下面的代码,刚开始判断了如果DBContext的生命周期是单例,要将Option的生命周期也设置为单例,如果不设置为单例,就会出现错误,这个错误在之前讲解IOC的文章中,我记得也提到过,接下来判断设置...Option的委托是否为null,如果不为null,那DBContext的构造函数是必须要有一个参数,所以下面调用了一个方法CheckContextConstructors。...,如果说这个Provider有啥作用,哈哈哈哈,我认为他就是创建Options的时候需要用,然后给一个有东西的不为空的CoreOptionsExtension,这个方法,实际上我觉得微软设置为internal...DbSet ContactHeadImgUrls { get; set; } public virtual DbSet...{ get; set; } public virtual DbSet OpLogs { get; set; } public virtual DbSet
“TransactionLogs”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。...需要在DbContext中添加的完整代码如下所示: public DbSet TransactionLogs { get; set; } 注册回调逻辑 我们需要实现“IPaymentCallbackAction...自动记录交易日志以及进行相关逻辑处理 自定义数据依赖交易日志进行存储,而不依赖支付渠道,因此支持无业务参数的支付渠道,也支持存储更多自定义数据 老Abp集成教程 如果使用Abp相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写...”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。...需要在DbContext中添加的完整代码如下所示: public DbSet TransactionLogs { get; set; } 注册回调逻辑 我们需要实现“IPaymentCallbackAction
BookDbDemo : DbContext { //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config) //使用“BookDbDemo...正如生成的DbContext所说:“为您要在模型中包含的每种实体类型都添加 DbSet。”...,我们在该类中添加如下的DbSet属性,并将注释删除,更加直观的看一看当前的结构: public class BookDbDemo : DbContext { public BookDbDemo...换句话说,继承了DbContext的类就对应了某一个数据库,其连接属性由配置文件中的连接配置决定,并在DbContext中设置进去(基类构造函数设置),这个DbContext中的所有DbSet就对应到数据库中的表...之后我们再次使用update-database命令将变更更新到数据库中,得到当前的数据库内容: 此时我们将book表中填充一些数据: 然后,我们将DbContext中的DbSet属性删除,再次进行迁移
{ public DbSet Orders { get; set; } public DbSet OrderDetails { get; set; }...context 必须满足下面的要求: 派生自 System.Data.Entity.DbContext 对于你希望使用的每一个实体集定义一个属性 每一个属性的类型是 System.Data.Entity.DbSet...Required] public DateTime TransactionDate { get; set; } } 在上面的这段代码中,我们强制了OrderNumber为主键列,且为自增;OrderTitle为不能为空且最大长度为...即使复杂类型的所有属性都是可空的,你也不能将整个复杂类型的对象设为 null, 例如,在这种情况下,即使街道的名称和街道的号码不是必填的,也不能有一个住宅的地址为 null,需要创建一个所有属性都是 null...DbSet.SqlQuery:这个方法返回的实体将会被 EF 跟踪修改,所以,如果你在这些返回的实体上做了修改,当 DbContext.SaveChanges 被调用的时候,将会被处理。
自动记录客户端信息以及自动异常处理和记录 仅需编写一次回调逻辑,即可支持多个支付渠道 业务参数支持更大长度(500) 开始使用 如果使用Abp相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写...下面以通联支付为例,我们需要在工程中引用此包: ?...添加模块依赖 在对应工程的Abp的模块(AbpModule)中,添加对“AbpAllinpayModule”的依赖,如: [DependsOn(typeof(AbpAllinpayModule))] 在DbContext...中添加名为“TransactionLogs”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。...需要在DbContext中添加的完整代码如下所示: public DbSet TransactionLogs { get; set; } 注册回调逻辑 我们需要实现
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。...MySql.Data.Entity 数据库优先 选择ADO.NET实体对象, 来自数据库的EF设计器 导入数据库结构 模型优先 选择ADO.NET实体对象,创建edmx文件,需要安装vs数据库连接插件或者odbc驱动 空EF...添加代码生成项,创建模型DBContext代码 using (Model1Container mc = new Model1Container()) { mc.BlogsSet.Add(new...Name = "hello", Title = "world" }); mc.SaveChanges(); } 代码优先 选择ADO.NET实体对象, 空的...public BlogEntities():base("name=mysqltest") { } //mysqltest是app.config中的key name public DbSet
领取专属 10元无门槛券
手把手带您无忧上云