【发布时间】:2015-10-21 19:48:35
【问题描述】:
我将 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; } } 我添加了索引注释,因为我想为 Sex 字段创建索引。
- 运行添加迁移命令。没关系。
-
运行 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 为 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