2014-06-09 5 views
8

Ich führe eine gespeicherte Prozedur durch Hinzufügen in das vorhandene Modell (edmx) durch Hinzufügen -> Funktion Importieren.Der Datenleser ist nicht mit dem angegebenen Modell kompatibel

Ich habe den folgenden Fehler erhalten.

Der Datenleser ist nicht kompatibel mit dem angegebenen 'dbModel.stored_procedure_Result'. Ein Mitglied des Typs 'UID' hat keine entsprechende Spalte im Datenleser mit demselben Namen.

_result Klasse des Modle ist als

public partial class stored_procedure_Result 
{ 
    public int UID { get; set; } 
    public int SYSTEM_ID { get; set; } 
    public byte ACTIVE { get; set; } 
    public string LEVEL { get; set; } 
    public string SYSTEM_CODE { get; set; } 
    public string SYSTEM_NAME { get; set; } 
    public Nullable<int> SYSTEM_SUB_TYPE { get; set; } 
    public Nullable<int> PM_ID { get; set; } 
} 

Fehler in der unteren Zeile dieser Klasse

using System; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.Core.Objects; 
using Company.Product.Domain.Models; 

namespace Company.Product.Domain.Data 
{ 
    public partial class BusinessPartnerDataContext : DbContext 
    { 
     public BusinessPartnerDataContext() 
      : base("name=BusinessPartnerDataContext") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 


     public virtual ObjectResult<stored_procedure_Result> stored_procedure(Nullable<int> pCId, Nullable<int> pSystemId, Nullable<bool> pParameterShow, Nullable<bool> pRETActive, Nullable<bool> pAllLevels, Nullable<bool> pSystemSubTypeShow, Nullable<bool> pShowResultSet) 
     { 
      ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(stored_procedure_Result).Assembly); 

      var pCIdParameter = pCId.HasValue ? 
       new ObjectParameter("pCId", pCId) : 
       new ObjectParameter("pCId", typeof(int)); 

      var pSystemIdParameter = pSystemId.HasValue ? 
       new ObjectParameter("pSystemId", pSystemId) : 
       new ObjectParameter("pSystemId", typeof(int)); 

      var pParameterShowParameter = pParameterShow.HasValue ? 
       new ObjectParameter("pParameterShow", pParameterShow) : 
       new ObjectParameter("pParameterShow", typeof(bool)); 

      var pRETActiveParameter = pRETActive.HasValue ? 
       new ObjectParameter("pRETActive", pRETActive) : 
       new ObjectParameter("pRETActive", typeof(bool)); 

      var pAllLevelsParameter = pAllLevels.HasValue ? 
       new ObjectParameter("pAllLevels", pAllLevels) : 
       new ObjectParameter("pAllLevels", typeof(bool)); 

      var pSystemSubTypeShowParameter = pSystemSubTypeShow.HasValue ? 
       new ObjectParameter("pSystemSubTypeShow", pSystemSubTypeShow) : 
       new ObjectParameter("pSystemSubTypeShow", typeof(bool)); 

      var pShowResultSetParameter = pShowResultSet.HasValue ? 
       new ObjectParameter("pShowResultSet", pShowResultSet) : 
       new ObjectParameter("pShowResultSet", typeof(bool)); 

      return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<stored_procedure_Result>("stored_procedure", pCIdParameter, pSystemIdParameter, pParameterShowParameter, pRETActiveParameter, pAllLevelsParameter, pSystemSubTypeShowParameter, pShowResultSetParameter); 
     } 
    } 
} 

Söréd Verfahren wie

folgt ist aufgetreten folgt
ALTER PROCEDURE STORED_PROCEDURE 
AS 
DECLARE @SYSTEMS TABLE (UID int NOT NULL IDENTITY(1,1), 
         SYSTEM_ID int NOT NULL, 
         ACTIVE tinyint NOT NULL, 
         [LEVEL] char(2) NOT NULL, 
         SYSTEM_CODE char(2) NULL, 
         SYSTEM_NAME varchar(50) NULL, 
         pm_ID int NULL,SYSTEM_SUB_TYPE int NULL) 
INSERT INTO @SYSTEMS 
VALUES (1, 
     62, 
     1, 
     'LEVEL', 
     'CODE', 
     'NAME') 
SELECT UID, 
     SYSTEM_ID, 
     ACTIVE, 
     LEVEL, 
     SYSTEM_CODE, 
     SYSTEM_NAME 
FROM @SYSTEMS RETURN 0 

Ergebnis der Verfahren ist

noch einige Kleinigkeiten, die RET-Anweisung aus der gespeicherten Prozedur zu entfernen vorgeschlagen habe ich versucht, mit als auch die RET-Anweisung in der gespeicherten Prozedur zu kommentieren, aber es half nicht

Einig Post vorgeschlagen, um die Spaltennamen zu überprüfen Ich habe die Spaltennamen im komplexen Typ geprüft, die Spaltennamen stimmen genau überein

Einige Post vorgeschlagen, dass alle Spalten, die dort sind in der _Result-Klasse RET von der Prozedur, aber die _Result-Klasse wird automatisch generiert werden, aber ich habe versucht, die letzten beiden Spalten zu entfernen, aber es hat nicht geholfen .. Darüber hinaus sagt der Fehler 'UID' Spalte, aber th at ist in Prozedur, Prozessergebnis, _Result-Klasse vorhanden.

ich diesen Fehler fühle mich in einigen Artikeln ist

using System; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.Core.Objects; 
using Company.Product.Domain.Models; 

als wenn die „modle von Datenbank-Update“, wirft es immer Fehler wie „kann nicht System.Data.Object zu System.Data.Entity konvertieren .Core.Objects "

+0

Verwendung UID als Primärschlüssel und geben Sie [Key] als Attribut auf die UID Eigenschaft –

Antwort

4

Bitte, was passiert, wenn Sie diese Schritte befolgen?

1 - Öffnen Sie Ihr Modell Ende klicken Modellbrowser

Open your Model end click Model Browser

2 - Offene Komplexe Typen Ordner und löschen Sie Ihre stored_procedure_Result

Open Complex Types folder and delete your stored_procedure_Result

3 - Stored Offenes Verfahren Ordner und doppelklicken Sie Ihr Verfahren

Open Stored Procedure folder and double click your procedure

4 - Get Spalteninformationen

5 - Erstellen neuen komplexen Typ

Get Column Information and Create New Complex Type

+0

Diese freaking meinen Speck gerettet. – Kristopher

Verwandte Themen