【问题标题】:EF6: Trouble creating an table's index using Migration and ODP.NETEF6:使用 Migration 和 ODP.NET 创建表的索引时遇到问题
【发布时间】:2015-10-21 19:48:35
【问题描述】:

我将 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. 我添加了索引注释,因为我想为 Sex 字段创建索引。

  3. 运行添加迁移命令。没关系。
  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 为 goto 声明退出 if loop mod null pragma raise return select update while with

THIS ARTICLE 的作者解释说我收到此错误消息是因为 ODP.NET 不支持 CR/LF 对。他建议跑步

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

但是我可以把这段代码放在系统迁移中吗?

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

【问题讨论】:

    标签: c# entity-framework plsql entity-framework-migrations odp.net


    【解决方案1】:

    我遇到了完全相同的问题,发现一篇关于 Oracle 的文章表明这​​将是 Oracle 10g 数据库的错误。

    尝试使用 11g 版本。在这个版本下我没有这些错误了。

    【讨论】:

    • 你能和我们分享这篇文章吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2022-01-15
    相关资源
    最近更新 更多