我使用ODP.net与EntityFramework 6代码优先迁移。我在项目中安装了使用Oracle和EntityFramework的所有必要软件包。 我尝试创建表及其索引。 我的行动:
创建表格
[Table("VSM_TP_REL")]
public class DepRel
{
[Column("ID"), Key]
public int Id { get; set; }
[Column("FULLNAME", TypeName="varchar2"), Required, MaxLength(250)]
public string FullName { get; set; }
[Column("SEX", TypeName="varchar2"), Required, MaxLength(1), Index("IX_VSM_TP_REL")]
public string Sex { get; set; }
}
我添加了索引注释,因为我想为性别字段创建索引。
运行update-database -verbose命令并获取以下脚本:
begin
execute immediate
'create index "PROD"."IX_VSM_TP_REL" on "PROD"."VSM_TP_REL" ("SEX")';
exception
when others then
if sqlcode <> -1408 then
raise;
end if;
end;
执行脚本后,我收到一条错误消息:
System.Runtime.Serialization.SerializationException: Type is not resolved for member 'Oracle.ManagedDataAccess.Client.OracleException,Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'.
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Type is not resolved for member 'Oracle.ManagedDataAccess.Client.OracleException,Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'.
问题1:执行任何pl / sql脚本时都会出现相同的错误。为什么?
问题2:如何解决此问题?
其他信息。
为了获得真正的错误,我创建了一个新的控制台应用程序。
static void Main(string[] args)
{
try
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<OracleDbContext, ConsoleApplication2.Migrations.Configuration>());
var db = new OracleDbContext();
db.Database.Initialize(false);
Console.WriteLine("Done.");
}
catch (Exception ex)
{
Console.WriteLine(ex);
Console.ReadLine();
}
}
运行我的控制台应用程序后,我收到以下错误消息:
PLS-00103:遇到符号&#34;&#34;当期待其中一个 以下内容:
如果loop mod null pragma raise return,开始case声明退出goto 使用&lt;&lt;选择更新关闭当前删除获取锁定插入 open rollback savepoint set sql execute commit forall merge pipe。
THIS ARTICLE的作者解释我收到此错误消息,因为ODP.NET不支持CR / LF对。他建议跑
command.CommandText = sql.Replace("\r\n", "\n");
但我可以将此代码放入系统迁移吗?
问题:请告诉我,如何拦截脚本更新数据库并对其进行编辑?
答案 0 :(得分:0)
我遇到了完全相同的问题,发现一篇关于Oracle的文章表明它在Oracle 10g数据库上会出错。
尝试使用11g版本。我不会在这个版本下出现这些错误。