مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

نمایش یک Sql View در mvc view با استفاده از dapper

چهارشنبه, 24 بهمن 1397 00:34

نمایش یک Sql View در mvc view با استفاده از dapper

باسلام

فرض کنیم دو تا جدول داریم که با فیلدی به هم ارتباط دارند. تو sql می تونیم براش یک ویو بسازیم و خروجی مورد نظر مون از ویو بگیرم و در صورت نیاز براساس مقداری فیلتر کنیم. با توجه به اینکه ما دو dapper می تونیم query بنویسم، اگه بیایم کوئری ویو مون رو با استفاده از dapper اجرا کنیم نوعی که باید بهمون بگردون براساس کدوم جدول باید بگیریم. اگر یکی از جداول رو بعنوان نوع خروجی کوئری dapper بزاریم جواب میده ولی فقط مقادیر همون جدول رو پر می کنه و فیلد های جدول دومی رو خالی برمی گردونه و طبیعی هم هست چون نوع خروجی رو جدول اولی انتخاب کردیم. من برای اینکار اومدم یک viewModel هم ساختم با لیست از هر دو جدول و خروجی کوئری dapper رو از نوع اون viewModel گرفتم ولی جواب نداد و مقادیر خروجی null برگردوند. خروجی اجرا که در متغیر از نوع viewModel ریخته میشه تعداد رکورد های برگشتی رو درست نشون میده و محتوای هر دو مدل داخل viewModel رو null نشون میده.

اساتید محترم راهنمایی بفرمایید کجای کارم اشتباه است یا اینکه راه حل اصولی چیه؟

متشکرم.

چهارشنبه, 24 بهمن 1397 14:39

با سلام

property های درون view model خودتون رو بر اساس view دریافت شده وارد نمایید

درون view model خودتون ، object مربوط به مدل رو قرار ندید و مستقیم property ها رو قرار بدین

نتیجه رو تست کنین و همینجا اعلام کنین

موفق باشین :)

پنج شنبه, 25 بهمن 1397 10:03

باسلام

ضمن تشکر از پاسخ گویی تون، این روش جواب میده.

منم بعد از قراردادن تاپیک راهی که به ذهنم رسید همین بود و جواب داد.

ولی موضوع این هست که ما داریم به جای viewModel یک Model جدید برای خروجی مون می سازیم و اگر تو پروژه مون بخوایم ویو های زیادی داشته باشیم مجبوریم به ازای هر خروجی مون Modelی متناظر با اون بسازیم.

وقتی از linq استفاده می کنیم و مثلا بین دو جدول Join ایجاد می کنیم می تونیم خروجی اون رو برای یک viewmodel مشخص کنیم(map کنیم). در مثال زیر ما یک viewModel به نام Table1Table2داریم که دو پراپرتی به ازای دو Model مون داره و در select هم نوع خروجی رو براساس اون در نظر گرفتم و هر کدوم از مدل های موجود در ویو مدل رو مقدار دهی کردیم.


 
from tbl1 in Table1
join tbl2 in Table2 on tbl1.ID equals tbl2.fID
select new Models.ViewModel.Table1Table2
{
Table1= tbl1 ,
Table2= tbl2
}

سوال اینجاست آیا تو ساختار Dapper چنین امکانی وجود نداره؟ یا راه حلی که مجبور نباشیم برای هر کوئری از نوع ویو یه مدل متناظر با اون بسازیم.

ممنون

پنج شنبه, 25 بهمن 1397 23:02

همونطور که شما به ازای هر جدول یه کلاس دارین ، به ازای هر ویو هم باید یه ViewModel بسازین

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید