当您可以直接在数据库中 SQL 时,运行 EF 迁移有什么意义?

What's the point of running an EF migration when you can SQL directly in database?

不允许 post 由于声誉原因发表评论。只是想获取有关将数据库连接到 Entity Framework 的更多信息,而不必切换到代码优先开发风格。查看所选答案的响应(他告诉 OP 基本上做他将在数据库中做的相同的事情,但使用 EF,然后添加一个额外的步骤,其中 EF "...ignores..." =37=] 之前的说明...

我想直接在 SQL 中创建 tables 和设计数据库,并让 csharp 库 read/write table 值(有点像 dapper 在不替换数据库的情况下如何运行,只是在它的旁边工作)。

教程不讨论如何将数据库与项目集成。它要么brushes over the subject, ignores it completely,要么讨论如何替换它。

不想 做任何 EF migrations(我不想 want/need 到 destroy/create 数据库每次我决定 运行、复制或转移项目)。任何和所有数据库回溯(back-up/restore)都应该通过 SQL(在我的工作环境中)完成。


只是为了明确我正在尝试学习的内容: 专门从事数据库管理(构建数据库模式、管理和监控数据以及建立现有数据库和数据)的人如何连接到项目以获取数据(同样,具体参考 DapperQuery 功能).

我想集成和设计微服务,有些可能共享相同的数据库连接或依赖另一个。但我只是想在干净的强类型 class 实体中读取数据,如果必须的话,可能会在其他地方处理 insert/update。

我更愿意使用 Dapper 而不是 EF,但是 ABP 与 EF 的设计集成度如此之高,避免它比仅仅使用它更令人头疼。

您应该能够像使用 DB-first 配置的任何其他项目一样在 ABP 下映射 EF。

我对 EF 使用的一致方法:(DB-First)

  1. 定义实体以匹配 table/view 结构。
  2. 定义配置 类 扩展 EntityTypeConfiguration<TEntity> 与关联的 ToTable()HasKey() 和任何 HasMany/HasRequired/HasOptional 关系(根据需要)。
  3. 在DbContext.OnModelCreating中:modelBuilder.Configurations.AddFromAssembly(GetType().Assembly);加载所有实体配置。 (假设 DbContext 与 models/configurations 在同一个程序集中替换 GetType().Assembly 以指向实体程序集。
  4. 关闭迁移。在 DbContext 构造函数中:Database.SetInitializer<MyDbContext>(null);

EF 提供的不仅仅是将表映射到 类。通过映射实体之间的关系,EF 可以帮助生成优化的查询以跨这些相关实体检索数据。这可以让您在不返回不必要的数据的情况下展平数据结构,取代对视图的需要,并通常减少从数据库到应用程序服务器的数据量。