خطای The data reader has more than one field error در انتیتی فریم ورک
من از سی شارپ Entity Framework و مدل DB First استفاده میکنم.
من باید فقط بخشی از اطلاعات یک جدول رو سِلِکت کنم یا باید ویو بسازم یا کلش رو توی کویری درخواست بدم
مساله اینه من نمیخوام ویو بسازم میخوام با SQL Query بخشی از اطلاعات یک جدول رو بگیرم.
متن خطا
System.Data.Entity.Core.EntityCommandExecutionException: 'The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.'
var quer_Sumfactor5 = dbms.Database.SqlQuery<INVO_LST>("SELECT SUM(MEGHk) AS Meghksm, SUM(MABL_K) AS Mablksm, SUM(N_MOIN) AS N_MOINSM, SUM(IMBAA) AS IMBAAsm FROM INVO_LST WHERE(TAG = 2) AND (NUMBER = " + TextB_Number.Text + ")").ToList();
چطور اینکار رو بکنم لطفا راهنمایی کنید
باتشکر
لینک : How do I get the result of an SQL query in entity framework C# DB first
پاسخ هوش مصنوعی
برای حل این مشکل و دریافت فقط بخشی از اطلاعات جدول به طور مستقیم با استفاده از SQL Query در Entity Framework، شما باید یک مدل جدید تعریف کنید که شامل فقط فیلدهایی باشد که قصد دارید دریافت کنید. به عنوان مثال:
public class ResultModel
{
public decimal Meghksm { get; set; }
public decimal Mablksm { get; set; }
public decimal N_MOINSM { get; set; }
public decimal IMBAAsm { get; set; }
}
سپس می توانید کد SQL Query خود را به شکل زیر تغییر دهید:
var quer_Sumfactor5 = dbms.Database.SqlQuery(
"SELECT SUM(MEGHk) AS Meghksm, SUM(MABL_K) AS Mablksm, SUM(N_MOIN) AS N_MOINSM, SUM(IMBAA) AS IMBAAsm " +
"FROM INVO_LST WHERE (TAG = 2) AND (NUMBER = @number)",
new SqlParameter("@number", TextB_Number.Text)).ToList();
در اینجا از کلاس جدید ResultModel
برای نگهداری نتایج استفاده کردیم. همچنین استفاده از SqlParameter
برای جلوگیری از حملات SQL Injection توصیه می شود.
با این تغییر شما فقط فیلدهای مورد نظر را دریافت خواهید کرد و دیگر با خطای "The data reader has more than one field" مواجه نخواهید شد.
دلیل خطای The data reader has more than one field error در انتیتی فریم ورک
بنظرم بهتره از دستور ExcecuteStoreCommand استفاده کنی :
var quer_Sumfactor5 = dbms.ExecuteStoreCommand("SELECT SUM(MEGHk) AS Meghksm, SUM(MABL_K) AS Mablksm, SUM(N_MOIN) AS N_MOINSM, SUM(IMBAA) AS IMBAAsm FROM INVO_LST WHERE(TAG = 2) AND (NUMBER = " + TextB_Number.Text + ")").ToList();
لطفا این لینک ها رو برای اطلاع بیشتر ملاحظه بفرمایید
https://stackoverflow.com/questions/66185837/how-do-i-select-specify-or-multi-column-with-sqlquery-in-c-sharp-wpf-entity-fr
https://www.quora.com/unanswered/How-do-you-select-specify-or-multi-column-with-SQLQuery-in-C-WPF-Entity-Framework
باتشکر از لطف شما
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf