EFCore-3

简介: 建模数据库,目前EFCore只支持Code First方法。

带着问题去思考!大家好

EF Core常见的任务

建模数据库,目前EFCore只支持Code First方法。

1:定义数据库和模型

数据库最终是按照一个派生自DbContext的类进行建模的,这个类包含一个或多个类型为DbSet<T>的集合属性,T是表中记录的类型,

publicclass YourDataBase:DbContext {    public DbSet<Customer> Customers{get;set;} }

底层物理关系数据库需要有一个名为Customers的表。

publicclass EntityBase {    public EntityBase()    {        Enabled=true;        Modified=DateTime.UtcNow;    }    publicbool Enabled{get;set;}    public DateTime? Modfied{get;set;} }publicclass Customer:EntityBase {  [Key]  publicint Id{get;set;}  publicstring FirstName{get;set;} }

这里强调下,数据库的模式和映射到类必须始终保持同步,否则,EF Core将抛出异常,这意味即使在表中添加一个新的可空列,也会是一个问题。另一方面,向类添加一个公有属性也可能会出现问题,不过,这种情况下。使用NoMapped特性就不会抛出异常。

 

2:注入连接字符串

这里可以重写DbContext类的OnConfiguring方法,该方法接受一个选项生成器对象,后者为每个原生支持的提供程序都提供一个扩展方法,包括SQL Server.SQLite。

publicclass SqlServerDbContext : DbContext, IDisposable {       protectedoverridevoid OnConfiguring(DbContextOptionsBuilder optionsBuilder)         {             optionsBuilder.UseSqlServer(ConnectionString);         } }

但是实际情况,你需要对不同的环境(生产,开发,暂存等)使用不同的字符串,这种情况,你需要找到一种方式来注入字符串。所以DbContext类中添加一个全局静态属性,

privatestaticstring ConnectionString { get; set; }

通常从配置文件中读取连接字符串,并在应用程序启动设置它

publicvoid Configure(IApplicationBuilder app, IWebHostEnvironment env) {   YourDataBase.ConnectionString=!env.IsDevelopment()?   "Production connection string":       "development connection string":     }

3:注入DbContext对象

根据隔离关注点所做的话,不建议这种

在ConfigureServices中

var connString=Configuration.GetConnectionString("YourDatabase"); services.AddDbContext<YourDatabase>(option=>option.UserSqlServer(connString));

4:自动创建数据库

当数据库还不存在的时候,创建数据库所需的代码与EF6的一些区别。EFCore中,必须显式请求这个步骤。需要自动穿件一个数据库。需要把下面代码放到启动类Configure中

var db=new YourDatabase(); db.Database.EnsureCreated():

如果数据库还不存在。EnsureCreated就会创建数据库,否则跳过。将初始数据加载到数据库的操作也可以在代码中完全控制。

db.Database.SeedTables();

在EnsureCreated()之后调用。

关于处理表数据。这里不在介绍,这很基础。在这里不在赘述,如果你稍微用过EF。

 

相关文章
MFC编程 -- 实现拖拽文件获取路径
MFC编程 -- 实现拖拽文件获取路径
384 0
|
存储 Kubernetes 负载均衡
K8S原理和实践
K8S原理和实践
579 0
|
存储 运维 Prometheus
都有什么报警监控工具
都有什么报警监控工具
296 1
|
人工智能 Unix 人机交互
揭秘操作系统:从命令行到图形界面的演变之旅
【10月更文挑战第3天】本文将带你穿越时空,探索操作系统从简单的命令行界面(CLI)如何进化为今天广泛使用的图形用户界面(GUI)。我们将一探究竟,了解这一变革背后的故事和技术进步,同时通过代码示例,揭示现代操作系统如何实现这一转换。文章不仅回顾了历史,还展望了未来可能的技术革新,旨在激励读者思考操作系统设计的哲学和未来发展方向。
376 4
|
机器学习/深度学习 数据采集 分布式计算
【颠覆传统!】揭秘Databricks如何助力零售业需求预测——从数据到洞察,一秒钟变销售预言家!
【8月更文挑战第9天】随着大数据技术的发展,数据驱动决策日益关键,尤其在零售业中,通过分析历史销售数据预测未来趋势变得至关重要。本文探讨如何运用Databricks平台优化零售业需求预测。Databricks是一个基于Apache Spark的统一数据分析平台,能高效处理大规模数据任务。通过示例代码展示数据读取、预处理及建模过程,相较于传统方法,Databricks在数据处理能力、可扩展性、内置机器学习库以及协作版本控制方面展现出显著优势,帮助零售商优化库存管理、提升客户体验并增加销售额。
388 8
|
XML SQL Java
MyBatis 的延迟加载是如何实现的
MyBatis的延迟加载(懒加载)特性提高了性能,只在需要时加载关联数据。配置延迟加载需在`mybatis-config.xml`中设置`lazyLoadingEnabled`为`true`,`aggressiveLazyLoading`为`false`。实现原理基于代理对象,MyBatis为延迟加载属性创建代理,在访问时触发实际查询。代理通过Java动态代理实现,拦截方法调用,按需加载数据。
495 0
|
移动开发 JavaScript 前端开发
学习vue3使用在线官方开发环境play.vuejs.org进行测试
学习vue3使用在线官方开发环境play.vuejs.org进行测试
314 1
|
缓存 Java Spring
教程:Spring Boot中集成Memcached的详细步骤
教程:Spring Boot中集成Memcached的详细步骤
|
缓存 Unix 编译器
Cmake 的构建结构:理解 Cmake 的构建过程和依赖管理
Cmake 的构建结构:理解 Cmake 的构建过程和依赖管理
342 0
|
安全 搜索推荐 Java
【SpringSecurity6.x】会话管理
【SpringSecurity6.x】会话管理
337 0