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;