EF6:使用Migration和ODP.NET创建表's索引时遇到问题
本文关键字:索引 问题 遇到 Migration 使用 ODP 创建 NET EF6 | 更新日期: 2023-09-27 18:05:38
我使用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; } }
-
我添加了索引注释,因为我想为性别字段创建索引
- 执行add-migration命令。没关系。
-
运行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:遇到符号":
begin case声明exit for goto if loop mod null pragma raise return使用<<关闭当前删除取回锁插入打开回滚保存点设置SQL执行提交所有合并管道。
这篇文章的作者解释说,我得到这个错误信息,因为ODP。NET不支持CR/LF对。他建议运行
command.CommandText = sql.Replace("'r'n", "'n");
但是我能把这段代码放到系统迁移中吗?
问题:请告诉我,我如何拦截脚本更新数据库并编辑它?
我有完全相同的问题,并找到了一篇关于Oracle的文章,指出这将是Oracle 10g数据库的错误。
试试11g的版本。在这个版本中我不再有这些错误了