EF6:使用迁移和 ODP.NET 创建表的索引时出现问题



我使用ODP.net与EntityFramework 6代码优先迁移。我在我的项目中安装了使用Oracle和EntityFramework所需的所有软件包。我尝试创建表和它们的索引。我的行为:

  1. 创建表

    [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; }
    }
    
  2. 我添加了索引注释,因为我想为性别字段创建索引

  3. 执行add-migration命令。没关系。
  4. 运行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;
    
  5. 执行脚本后,我得到一个错误消息:

    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:遇到符号":

begin case声明exit for goto if loop mod null pragma raise return使用<<关闭当前删除取回锁插入打开回滚保存点设置SQL执行提交所有合并管道。

这篇文章的作者解释说,我得到这个错误信息,因为ODP。NET不支持CR/LF对。他建议运行

command.CommandText = sql.Replace("rn", "n");

但是我能把这段代码放到系统迁移中吗?

问题:请告诉我,我如何拦截脚本更新数据库并编辑它?

我有完全相同的问题,并找到了一篇关于Oracle的文章,指出这将是Oracle 10g数据库的错误。

试试11g的版本。在这个版本中我不再有这些错误了

相关内容

  • 没有找到相关文章

最新更新