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