【问题标题】:Entity Framework Exception: Schema specified is not valid.实体框架异常:指定的架构无效。
【发布时间】:2015-01-23 06:34:43
【问题描述】:

我在 Asp.net 中使用实体框架在 vs 2010 中使用 oracle 数据库工作。我从代码中为实体框架工作数据上下文提供连接字符串。这是我的代码:

public static string getConStrSQL()
    {

        //string connectionString = new System.Data.EntityClient.EntityConnectionStringBuilder
        string connectionString = new System.Data.EntityClient.EntityConnectionStringBuilder
        {
            Metadata = "res://*",
            Provider = "Oracle.ManagedDataAccess.Client",
            //Provider = "Oracle.DataAccess.Client",
            ProviderConnectionString = new System.Data.SqlClient.SqlConnectionStringBuilder
            {
                //InitialCatalog = "ORCL",
                DataSource = "MONOJ-PC:1521/ORCL",
                //IntegratedSecurity = false,
                UserID = "C##MONOJ",                 // User ID such as "sa"
                Password = "Thanks123",               // hide the password
            }.ConnectionString
        }.ConnectionString;

        return connectionString;
    }

    public List<CUSTOMER> GetCustomerList()
    {

        using (Entities db = new Entities())
        {
            db.Connection.ConnectionString = getConStrSQL();
            db.Connection.Open();

            var data = from p in db.CUSTOMERs
                       select p;

            db.Connection.Close();

            return data.ToList();
        }
    }

但是当我运行代码时出现以下错误:

指定的架构无效。错误: 错误 0194:加载到 ItemCollection 中的所有工件必须具有相同的版本。遇到了多个版本。 DAL.DBModel.ssdl(2,46):错误 0172:所有 SSDL 工件必须针对同一提供程序。提供者“Oracle.DataAccess.Client”与之前遇到的“Oracle.DataAccess.Client”不同。 DAL.DBModel.ssdl(2,89):错误 0169:所有 SSDL 工件必须针对同一提供程序。 ProviderManifestToken '12.1' 与之前遇到的 '9.2' 不同。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(3,4):错误 0019:EntityContainer 名称必须是唯一的。已定义名为“Schema”的 EntityContainer。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(834,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.Table”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(844,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.TableColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(870,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.View”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(882,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ViewColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(908,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.Function”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(933,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.Procedure”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(943,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.Parameter”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(967,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.Constraint”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(979,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.CheckConstraint”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(987,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ConstraintColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(996,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ForeignKeyConstraint”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1005,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ForeignKey”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1016,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ViewConstraint”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1031,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.TableTableConstraint”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1044,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ConstraintConstraintColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1057,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ConstraintForeignKey”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1070,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.FromForeignKeyColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1083,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ToForeignKeyColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1096,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.TableTableColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1109,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ViewViewColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1122,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.FunctionFunctionParameter”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1135,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ProcedureProcedureParameter”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1148,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ViewViewConstraint”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1161,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ViewConstraintConstraintColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1174,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ViewConstraintForeignKey”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1187,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.FromForeignKeyViewColumn”已定义。 Oracle.ManagedDataAccess.src.EntityFramework.Resources.EFOracleStoreSchemaDefinition.ssdl(1200,4):错误 0019:架构中的每个类型名称都必须是唯一的。类型名称“Oracle.ToForeignKeyViewColumn”已定义。

我用谷歌搜索但没有得到任何答案。 请帮我。是银色的。

【问题讨论】:

  • 您的项目中有多少个 .edmx 文件?
  • 感谢您的回复,我的项目中有一个 .edmx 文件....

标签: c# oracle entity-framework


【解决方案1】:

检查您的项目引用 - 您可能包含一个“带来”它自己的数据库/架构的项目。如:

  • 项目 A --> 有 EF 版本 X,数据库 project_a.edmx
  • 项目 B --> 引用“项目 A”,具有 EF 版本 Y,数据库 project_b.edmx

X 和 Y 版本可能不同。

这可能是由于根据 .NET/EF 版本生成的连接字符串不同——请参阅更多http://weblogs.asp.net/kencox/schema-specified-is-not-valid-error-on-upgrading-to-asp-net-4

【讨论】:

    【解决方案2】:

    我知道这个答案已经晚了,但我希望它能够提供未来的参考。

    我遇到了同样的问题,我发现问题在于正确指定元数据:

    string connectionString = new System.Data.EntityClient.EntityConnectionStringBuilder
    {
        Metadata = "res://*/Models.ModelKDM.csdl|res://*/Models.ModelKDM.ssdl|res://*/Models.ModelKDM.msl",
        Provider = "Oracle.DataAccess.Client",
        ProviderConnectionString = new System.Data.SqlClient.SqlConnectionStringBuilder
        {
            DataSource = server,
            UserID = user,
            Password = pass,
        }.ConnectionString
    }.ConnectionString;
    return connectionString;
    

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多