Считыватель данных несовместим с указанной Entity Framework
У меня есть метод, который будет возвращать минимальные результаты из sproc, чтобы заполнить меню выбора. Когда я хочу получить минимальные результаты, я передаю bool getMin = true для sproc, а когда мне нужна полная запись, я передаю bool getMin = false.
Это вызывает ошибку Entity FrameWork "Считыватель данных несовместим с указанным"
Наиболее значимая часть ошибки
{"Message": "Произошла ошибка.", "ExceptionMessage": "Средство чтения данных несовместимо с указанным 'CatalogModel.proc_GetFramingSystems_Result'. Элемент типа FrameType не имеет соответствующего столбца в считыватель данных с тем же именем. "," ExceptionType ":" System.Data.EntityCommandExecutionException ",
Очевидно, что ошибка говорит мне, что когда читатель данных пытался установить свойство FrameType, которого не было в результатах запроса.
Теперь я понимаю ошибку, что я хочу знать, так это то, что я собираюсь разделить этот SQL-фрагмент на два пакета или есть способ обойти это?
Моя функция ниже
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>();
};
}
Мой TSQL ниже
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;