EFCore-3
带着问题去思考!大家好
EF Core常见的任务
建模数据库,目前EFCore只支持Code First方法。
1:定义数据库和模型
数据库最终是按照一个派生自DbContext的类进行建模的,这个类包含一个或多个类型为DbSet<T>的集合属性,T是表中记录的类型,
public class YourDataBase:DbContext { public DbSet<Customer> Customers{get;set;} }
底层物理关系数据库需要有一个名为Customers的表。
public class EntityBase { public EntityBase() { Enabled=true; Modified=DateTime.UtcNow; } public bool Enabled{get;set;} public DateTime? Modfied{get;set;} } public class Customer:EntityBase { [Key] public int Id{get;set;} public string FirstName{get;set;} }
这里强调下,数据库的模式和映射到类必须始终保持同步,否则,EF Core将抛出异常,这意味即使在表中添加一个新的可空列,也会是一个问题。另一方面,向类添加一个公有属性也可能会出现问题,不过,这种情况下。使用NoMapped特性就不会抛出异常。
2:注入连接字符串
这里可以重写DbContext类的OnConfiguring方法,该方法接受一个选项生成器对象,后者为每个原生支持的提供程序都提供一个扩展方法,包括SQL Server.SQLite。
public class SqlServerDbContext : DbContext, IDisposable { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(ConnectionString); } }
但是实际情况,你需要对不同的环境(生产,开发,暂存等)使用不同的字符串,这种情况,你需要找到一种方式来注入字符串。所以DbContext类中添加一个全局静态属性,
private static string ConnectionString { get; set; }
通常从配置文件中读取连接字符串,并在应用程序启动设置它
public void 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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
· Excel百万数据高性能导出方案!
· 揭秘 AI 工具的系统提示词「GitHub 热点速览」
· DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器!
· 日常问题排查-空闲一段时间再请求就超时
· 上周热点回顾(4.28-5.4)