Der Datenleser ist mit dem angegebenen Entity Framework nicht kompatibel

Ich habe eine Methode, die die nackten Min-Ergebnisse eines Sprocs zurückgibt, um ein ausgewähltes Menü zu füllen. Wenn ich die minimalen Ergebnisse haben möchte, übergebe ich bool getMin = true an den Sproc, und wenn ich den vollständigen Datensatz haben möchte, übergebe ich bool getMin = false.

Dies verursacht den Entity FrameWork-Fehler "Der Datenleser ist mit dem angegebenen nicht kompatibel"

Der relevanteste Teil des Fehlers

{"Message": "Ein Fehler ist aufgetreten.", "ExceptionMessage": "Der Datenleser ist nicht mit dem angegebenen 'CatalogModel.proc_GetFramingSystems_Result' kompatibel. Ein Member des Typs 'FrameType' hat keine entsprechende Spalte in der Datenleser mit demselben Namen. "," ExceptionType ":" System.Data.EntityCommandExecutionException ",

Offensichtlich sagt mir der Fehler, dass der Datenleser versucht hat, die Eigenschaft 'FrameType' festzulegen, die nicht in den Abfrageergebnissen enthalten ist.

Jetzt verstehe ich den Fehler. Ich möchte wissen, dass ich diesen SQL-Sproc nicht in zwei Sprocs aufteilen will, oder gibt es eine Lösung dafür?

Meine Funktion unten

public static IEnumerable<IFramingSystem> GetFramingSystems(int brandID, string frameType, string glazeMethod, bool getMin)
{
    using (CatalogEntities db = new CatalogEntities())
    {
        return db.proc_GetFramingSystems(brandID, frameType, glazeMethod, getMin).ToList<IFramingSystem>();
    };
}

Mein TSQL unten

ALTER proc [Catelog].[proc_GetFramingSystems]
@BrandID   INT,
@FrameType VARCHAR(26),
@GlazeMethod VARCHAR(7) ='Inside',
@getMin    BIT = 0
as
BEGIN
SET NOCOUNT ON;
IF @getMin =0
BEGIN
SELECT c.ID,c.Name,c.Descr,c.FrameType,c.isSubFrame,
       c.GlassThickness,c.GlassPosition,c.GlazingMethod,c.SillProfile
        from Catelog.Component c
WHERE c.MyType ='Frame' 
AND c.FrameType = @FrameType
AND c.GlazingMethod = @GlazeMethod
AND c.ID IN(
SELECT cp.ComponentID FROM Catelog.Part p JOIN
            Catelog.ComponentPart cp ON p.ID = cp.PartID
            WHERE p.BrandID = @BrandID
            )
            ORDER BY c.Name
END
ELSE
SELECT c.ID,c.Name,c.Descr
        from Catelog.Component c
WHERE c.MyType ='Frame' 
AND c.FrameType = @FrameType
AND c.GlazingMethod = @GlazeMethod
AND c.ID IN(
SELECT cp.ComponentID FROM Catelog.Part p JOIN
            Catelog.ComponentPart cp ON p.ID = cp.PartID
            WHERE p.BrandID = @BrandID
            )
            ORDER BY c.Name
SET NOCOUNT OFF;
END;

Antworten auf die Frage(3)

Ihre Antwort auf die Frage