کوئری استرینگ با ENTITY FRAMEWORK
سلام- یک webapi در محیط asp.net mvc4 دارم که به شیوه entitiyframework با پایگاه داده در ارتباطه.
یک دستور select بصورت زیر دارم که بعد از اجرا جواب رو نمیاره و پیغام خطاش اینه :
ora-00932:inconsistent datatypes:expected NCHAR got NCLOB
اینم از دستوراتی که اجرا میشن:
public IEnumerable<Milad.Models.DomainModels.A_LASTNOBAT> GetGis(string id)
{
var model3 = blnobat.Select().OrderBy(p => p.A_NOBAT).Where(p => p.A_COUNTERNO.Value.ToString().Contains(id));
return (model3).Tostring();
}
ضمنا فیلد A_COUNTERNO در دیتابیس از نوع number هستش.
ممنون از راهنماییتون
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
var model3 = blnobat.Where(p => p.A_COUNTERNO.Value.ToString().Contains(id)).Selec t(p=>p.A_NOBAT).OrderBy(p => p.A_NOBAT);
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
var model3 = blnobat.Where(p => p.A_COUNTERNO.Value.ToString().Contains(id)).Selec t(p=>p.A_NOBAT).OrderBy(p => p.A_NOBAT);
سلام- فرقی نکرد هنوزم همون خطا رو میده. ضمن اینکه از orderby آخر دستور هم ایراد میگیره...
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
orderby رو حذف کن ببین پیغام خطاش فرق میکنه؟
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
نقل قول:
نوشته شده توسط
a.golzar66
orderby رو حذف کن ببین پیغام خطاش فرق میکنه؟
این کارم کردم ولی فایده ای نداشت:
var model3 = blnobat.Select().Where(p => p.A_COUNTERNO.Value.ToString().Contains(id));
همین پیغام خطا رو میده:
ORA-00932: inconsistent datatypes: expected NCHAR got NCLOB
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
دستور select چیه کارش اونم حذف کن ببین کد راه میده
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
نقل قول:
نوشته شده توسط
a.golzar66
دستور select چیه کارش اونم حذف کن ببین کد راه میده
خب من میخوام یه تعداد رکورد رو از دیتابیس select کنم.اگه اونو بردارم که دیگه دستوری باقی نمیمونه!
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
وقتی Where دارید نیاز به Select ندارید.
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
فکر کنم باید از دستور ToList استفاده کنی و اخر خط هم باید بنویسی نه وسطش
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
ابتدا کوئریتون بدون SELECT و WHERE و ORDER BY اجرا کنید اگر به خطا برخورد کردید ممکنه فیلدی در دیتابیس از نوع NCLOB باشه و سمت calss های POCO شما از نوع string تعریف کرده باشید و خطای مربوط به مپ کردن فیلدها باشه و این خطا ربطی به شرط where نداشته باشه
و اگر اینجور بود تنظیمات کلاس های EF رو در برنامه تغییر بدید
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
نقل قول:
نوشته شده توسط
ali_md110
ابتدا کوئریتون بدون SELECT و WHERE و ORDER BY اجرا کنید اگر به خطا برخورد کردید ممکنه فیلدی در دیتابیس از نوع NCLOB باشه و سمت calss های POCO شما از نوع string تعریف کرده باشید و خطای مربوط به مپ کردن فیلدها باشه و این خطا ربطی به شرط where نداشته باشه
و اگر اینجور بود تنظیمات کلاس های EF رو در برنامه تغییر بدید
با تشکر از همگی
کوئری را بدون select , orderby تست کردم خطای اول سر جاشه. ضمن اینکه این کوئری فقط با فیلدهای number(int) این خطا رو میده یعنی اگه بنده فیلدی که در این دستور داره جستجو میشه(A_COUNTERNO) بردارم و بجاش یک فیلدی که داخل دیتابیس از نوع varchar هست بذارم درست کار میکنه.
در خصوص مپ بودن نوع فیلد A_COUNTERNO در دیتابیس اوراکل number با طول 10 هستش و کلید اصلی نیست. داخل کلاس EF هم بصورت زیره:
public Nullable<int> A_COUNTERNO { get; set; }
والا دیگه موندم علت خطاش چیه؟
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
ممکنه پروایدر اوراکل با روش dbfirst این مشکلات رو داشته باشه فیلد number بشتر از 22 بایت نمیتونه بپذیره در صورتیکه varchar تا 4k هم فضا میگیره
و یا ممکنه این تبدیل به toString مشکلات شما باشه
ابتدا مقدار Contains(id) رو دستی ست کنید
بجای id یک مقدار واقعی درون دیتابیس قرار بدید
Where(p => p.A_COUNTERNO.Value==id));
در ضمن شما چرا فیلد درون دیتابیس رو دارید کاست میکنید ؟
p.A_COUNTERNO.Value.ToString()
بجای اون پارامتر ورودی رو به عدد کاست کنید
این لینک ها رو هم ببینید
https://stackoverflow.com/questions/32271718/oracle-entity-framework-call-custom-function-edit-distance
و
https://stackoverflow.com/questions/...b-on-oracle-db
نقل قول: کوئری استرینگ با ENTITY FRAMEWORK
نقل قول:
نوشته شده توسط
ali_md110
خیلی لطف کردید.سپاسگزارم. حق با شماست . کوئری خروجی داد.
به همین صورت اصلاح کردم، هم با select هم بدون select جواب میده:
var model3 = blnobat.select().Where(p => p.A_COUNTERNO.Value == id).ToList();
وروردی تابع هم بجای استرینگ از نوع int قرار دادم.