【问题标题】:Why do I get this error when I'm trying to create models from database?当我尝试从数据库创建模型时,为什么会出现此错误?
【发布时间】:2021-05-05 05:44:45
【问题描述】:

我正在尝试使用 Entity Framework Core 5 dbcontext scaffold 从我的 Oracle 数据库 10g 创建模型:

dotnet ef dbcontext scaffold "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=mssrv.infofer.local)(PORT=1533)))(CONNECT_DATA=(SERVICE_NAME=medusa)));User ID=TRAFICALERT_EFC;Password=traficalert" Oracle.EntityFrameworkCore -o Entities -f

但是,我收到以下错误:

2021-05-05 08:21:12.783360 ThreadID:1   (ERROR)   OracleDatabaseModelFactory.Cre
ate() :  Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00904
: "DEFAULT_COLLATION": invalid identifier
   at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32&
cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementTyp
e, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& has
MoreRowsInDB, Boolean bFirstIterationDone)
   at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConn
ectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors
, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean b
FirstIterationDone)
   at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String comma
ndText, OracleParameterCollection paramColl, CommandType commandType, OracleConn
ectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, I
nt64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[] scnFor
Execution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionP
aramColl, Boolean& bBindParamPresent, Int64& internalInitialLOBFS, Int64 interna
lInitialJSONFS, OracleException& exceptionForArrayBindDML, OracleConnection conn
ection, OracleLogicalTransaction& oracleLogicalTransaction, IEnumerable`1 adrian
ParsedStmt, Boolean isDescribeOnly, Boolean isFromEF)
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requer
y, Boolean fillRequest, CommandBehavior behavior)
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader()
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteScalar()
   at Oracle.EntityFrameworkCore.Scaffolding.Internal.OracleDatabaseModelFactory
.<Create>g__GetCollation|9_0(DbConnection connection, String schema)
   at Oracle.EntityFrameworkCore.Scaffolding.Internal.OracleDatabaseModelFactory
.Create(DbConnection connection, IEnumerable`1 tables, IEnumerable`1 schemas)

当我尝试从数据库创建模型时,为什么会出现此错误?

谢谢。

【问题讨论】:

    标签: c# oracle .net-core entity-framework-core


    【解决方案1】:

    fine manual 表示该提供商的最低 oracle 11.2

    升级您的数据库或更改提供程序

    【讨论】:

    • 我公司不想升级数据库。另外,我知道德瓦特,但我的公司不会对此进行投资。获取 DDL 脚本并创建本地 Oracle 数据库 11.2,然后使用它来创建模型是个好主意吗?
    • 但是他们会付钱给你,让你花几天的时间来克服这个障碍,只是为了达到更多的目标,他们将不得不付给你更多的钱来解决这个问题?为了节省 159 美元的许可费?听起来您需要在其他地方找到一份工作,在某个具有一定商业意识的地方。如果我要着手制造汽车,我不会花费数百万美元来制造轮胎工厂。我只是装上别人已经制造的轮胎
    • 这很好,但现在我需要找到解决方案。我在这里没有看到任何其他解决方案,所以我将使用 DDL 脚本创建本地数据库,然后使用脚手架创建模型。
    • 使用免费/试用版的 Devart 来证明它是否适合您可能是更有价值的时间花费?
    • @littleO 逆向工程可能只是冰山一角。不支持意味着它不能保证在运行时正常运行,因此即使您克服了当前问题,您在尝试实际使用 EF Core 访问数据库时也可能会遇到其他问题(无法解决)。你最好不要尝试——要么升级数据库,要么购买支持它的提供程序,或者使用另一个支持它的 ORM - EF Core 不适合你。
    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2020-10-18
    • 2023-03-06
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多