gpt4 book ai didi

c# - 避免使用 Entity Framework 的 Oracle 模式名称

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:10 27 4
gpt4 key购买 nike

我正在使用 Official Oracle SQL 和 Entity Framework驱动读取数据库。但是在读取数据库时,它会在表名前加上“dbo”前缀。:

SELECT
*
FROM "dbo"."Woningen"

没有“dbo”。前缀代码工作正常,它会导致错误“表或 View 不存在”。这可能是因为用户不是“dbo”,所以它无权访问该架构。这是我正在使用的 Entity Framework 代码:

[Table("Woningen")]
public class Woningen

我已尝试更新 Oracle nuget 包,但随后出现错误“连接字符串格式不正确”。所以它可能和以前有同样的错误,它只是更快地失败了。这是我使用的 connectionString 格式:

<add name="DefaultConnection"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="USER ID=testUser;PASSWORD=password;
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=serverUrl)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=Database)));"/>

我可以看到这个问题的三种可能的解决方案,但不知道如何实现它们:

  1. 操纵 Entity Framework 以从查询中排除架构名称
  2. 授予我的用户访问架构的权限
  3. 更新驱动程序并修复连接字符串格式,如果有人知道格式是如何改变的..

请注意,当前代码已在生产环境中运行,因此当前版本应该没问题。数据库及其用户是新的,因此问题可能在于它们的创建方式。

最佳答案

您可以指定 Entity Framework 使用的模式。见下文

如果您使用的是 Entity Framework 6+,则可以使用以下内容

public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Set a default schema for ALL tables
modelBuilder.HasDefaultSchema("YourSchemaName");
}
}

如果您希望在特定表上设置架构...

[Table("Woningen"), Schema = "YourSchemaName")]
public class Woningen { }

如果您使用的是 EF5

public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Unfortunately you have to specify each table you want to set a schema for...
modelBuilder.Entity<Woningen>().ToTable("Woningen", "YourSchemaName");
}
}

关于c# - 避免使用 Entity Framework 的 Oracle 模式名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46068912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com