首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用EF Core + Code First +迁移创建数据库

用EF Core + Code First +迁移创建数据库
EN

Stack Overflow用户
提问于 2020-08-13 15:28:51
回答 3查看 1.6K关注 0票数 2

对于带有代码优先和迁移的实体框架核心应用程序,如果数据库不存在,我就无法创建它。

我的第一个电话是:

代码语言:javascript
运行
复制
using (MyDbContext context = new MyDbContext())
{
    context.Database.Migrate();
}

它运行重写的方法:

代码语言:javascript
运行
复制
// 1
protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder)
{
    optionBuilder.UseOracle($"ENLIST=dynamic;USER ID={UserId};POOLING=True;CONNECTION TIMEOUT=15;PASSWORD={Pwd};DATA SOURCE=localhost:1521/xe;CONNECTION LIFETIME=0");
}

// 2
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasDefaultSchema(UserId);
}

并引发以下异常:

System.NotSupportedException :“所需用户不存在或提供无效用户名/密码”

我期待数据库和用户将在HasDefaultSchema调用中创建。我在这个案子里漏掉了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-21 13:47:17

不幸的是,当模式不存在时,UseOracle方法在optionBuilder中不支持模式的创建。

原因是,对于Oracle,Server或Postgres中的模式之间存在着特定的差异。

EnsureSchemaOperation类

用于确保架构存在的MigrationOperation。也就是说,架构将被创建当且仅当它还不存在。

代码语言:javascript
运行
复制
[System.Diagnostics.DebuggerDisplay("CREATE SCHEMA {Name}")]
public class EnsureSchemaOperation : 
Microsoft.EntityFrameworkCore.Migrations.Operations.MigrationOperation

该方法使用语法create schema,可以应用于某些数据库引擎,但不能在Oracle中应用。原因如下:

-- CREATE语句实际上并不在Oracle中创建架构。CREATE语句仅用于在单个SQL语句中创建模式中的对象(即:表、视图),而不必发出单个create和CREATE语句。如果使用CREATE语句,则可以将它们作为一个单元控制。

Oracle架构与Windows操作系统中的“我的文档”文件夹类似。用户可以向其他用户授予查看其架构中的内容的权限,但Oracle架构实际上是用户的工作区。

MS的架构是命名空间。虽然您可以拥有会计和市场营销模式,但它们并不是与单个用户紧密耦合的。会计模式中的对象包含会计信息,营销模式中的对象具有营销信息。

Oracle模式与用户紧密耦合,MS SQL Server模式主要用于分类。

在Oracle中,架构始终是用户。您可以创建两个同名的不同表,它们属于不同的用户/架构。在Server中,架构和用户是分开的。用户只用于登录和定义权限。

我相信微软没有在受影响类的相应方法中实现CREATE USER xxx

票数 4
EN

Stack Overflow用户

发布于 2020-08-17 16:45:18

您是否检查过迁移是否包括模式的创建?

根据我的经验,一些数据库连接器默认情况下包括模式的自动创建,有些则不包括,例如mysql和ms做的,但是MariaDB的相同代码需要在前面创建模式。

票数 1
EN

Stack Overflow用户

发布于 2020-08-24 04:58:46

提供的用户名和密码似乎有问题。请交叉检查用户名和密码与您正在使用的oracle实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63398380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档