PDA

View Full Version : سوال: مشکل عجیب در mvc



pooria2c
شنبه 08 تیر 1392, 14:09 عصر
سلام دوستان عزیز
آقا من یه مشکل (غیر منطقی) توی mvc دارم. اگه میشه راهنماییم کنین، پیشاپیش مرسی.

http://upload7.ir/images/37307008392555305759.png (http://upload7.ir/)

همونطور که توی تصویر معلومه ما یه سری داده داریم (ستون آخر)، مثلاً پرینتر رو در نظر بگیرین: 3 نوع جوهر افشان، لیزری، سوزنی داره وقتی توی پایگاه داده کوئری می گیرم درسته، ولی موقعی که با mvc می خوام همین view رو نشون بدم، ستون آخری که قرمز کردم تکرار میشه مثل تصویر زیر (یعنی مثلاً برای پرینتر چون سه دسته است (جوهر افشان، لیزری، سوزنی) 3 بار گزینه اول یعنی جوهر افشان تکرار میشه :

http://upload7.ir/images/16765353934683314209.png (http://upload7.ir/)

علتش چیه؟:متفکر::متفکر::متفکر::مت کر:

Saeed_m_Farid
شنبه 08 تیر 1392, 15:25 عصر
سلام
اولاً کدتون رو بذارین (هم SQL و هم Linq یا هرچی که تو کنترلر برای واکشی داده ها دارید)، بعدش هم اینطور که از عکس معلومه، وقتی ستون اول (تو عکس اول) دارای داده هست، داده ها تکرار میشن، پس:
کوئری SQL شما از لحاظ منطقی، با کدی که در کنترلر MVC نوشتید یکی نیست؛ به احتمال قوی اگه نتیجه از چند تا جدول هست JOIN که تو Sql دادین، تو کدهای MVC درست اعمال نشده؛ یا اگه یک جدول باشه (که معمولاً این نوع طراحی اشتباهه!) اونجا Distinct کردین اینجا نکردین، یا در Group By مشکل دارید و ... بدون کد بیشتر از این نمیشه راهنمایی کرد.

pooria2c
شنبه 08 تیر 1392, 15:40 عصر
سلام
اولاً کدتون رو بذارین (هم SQL و هم Linq یا هرچی که تو کنترلر برای واکشی داده ها دارید)



سلام دوست عزیز با تشکر از توجهتون :
من تعدادی جدول دارم که با هم join کردم، حالا تصویر اولی خروجی Join شده جداول هست، فکر نمی کنم توی mvc مشکلی وجود داشته باشه برای اینکه بخواد یه جدول ساده رو نشون بده مگر اینکه توی mvc ویو ها رو طور دیگه ای نشون می دن؟؟؟!؟!؟!؟!

اینم از کد mvc:


@model IEnumerable<MvcApplication3.DataAccessLayer.View_1>

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.ProductCategoryId)
</th>
<th>
@Html.DisplayNameFor(model => model.ProductCategory)
</th>
<th>
@Html.DisplayNameFor(model => model.AttributeCategoryId)
</th>
<th>
@Html.DisplayNameFor(model => model.AttributeCategory)
</th>
<th>
@Html.DisplayNameFor(model => model.AttributeId)
</th>
<th>
@Html.DisplayNameFor(model => model.Attribute)
</th>
<th>
@Html.DisplayNameFor(model => model.TypeOfAttributeId)
</th>
<th>
@Html.DisplayNameFor(model => model.TypeOfAttribute)
</th>
<th>
@Html.DisplayNameFor(model => model.AttributeOptionId)
</th>
<th>
@Html.DisplayNameFor(model => model.AttributeOption)
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ProductCategoryId)
</td>
<td>
@Html.DisplayFor(modelItem => item.ProductCategory)
</td>
<td>
@Html.DisplayFor(modelItem => item.AttributeCategoryId)
</td>
<td>
@Html.DisplayFor(modelItem => item.AttributeCategory)
</td>
<td>
@Html.DisplayFor(modelItem => item.AttributeId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Attribute)
</td>
<td>
@Html.DisplayFor(modelItem => item.TypeOfAttributeId)
</td>
<td>
@Html.DisplayFor(modelItem => item.TypeOfAttribute)
</td>
<td>
@Html.DisplayFor(modelItem => item.AttributeOptionId)
</td>
<td>
@Html.DisplayFor(modelItem => item.AttributeOption)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}

</table>

Saeed_m_Farid
شنبه 08 تیر 1392, 16:00 عصر
... فکر نمی کنم توی mvc مشکلی وجود داشته باشه برای اینکه بخواد یه جدول ساده رو نشون بده مگر اینکه توی mvc ویو ها رو طور دیگه ای نشون می دن؟؟؟!؟!؟!؟! ...
خوب دوست محترم، اگه اینطوری فکر نمی کنید، چرا کدهای تولید شده View رو گذاشتید؟ View فقط نتیجه اکشن رو رندر میکنه، هیچ کار خاصی (تا تغییری تو کد AutoGenerate ندادین) انجام نمیده؛ پس مهم کدهای اکشن هست که باسد بررسی بشن؛ ضمناً تو تگ #C بذارین بیزحمت که بشه خوند کدها رو ...

pooria2c
شنبه 08 تیر 1392, 16:41 عصر
خوب دوست محترم، اگه اینطوری فکر نمی کنید،...

دوست خوبم شرمنده، مرسی که توجه می کنید،

یه بار دیگه مسئلمو شرح می دم، فکر کنم از View که می گم اشتباهی برداشت کردید (منظورم View توی پایگاه داده ها هست)،

و تکه کد مخصوص به View (توی MVC) به صورت زیره:


return View(db.View_1.ToList());


من تعدادی جدول دارم که اون ها رو با هم Join کردم و توی یه View (توی پایگاه داده) به اسم View_1 ذخیره کردم (تصویر شماره 1) حالا من فقط می خوام که تصویر شماره 1 (که توی خود اس کیو ال سرور عکس گرفتم) رو توی محیط mvc نمایش بدم، وقتی می خوام این کار و کنم خروجی (تصویر شماره 2) نشون داده میشه!!!!!!

چرا؟؟؟؟؟؟؟؟
کد ها رو هم گذاشتم

Saeed_m_Farid
شنبه 08 تیر 1392, 17:27 عصر
آهان، از اون لحاظ!
درسته من بد متوجه شدم، View_1 تو DataAccessLayer چطوری تعریف شده؟ فکر کنم از تعاریف باشه، مثلاً View_1 رو تو DbContext تعریف کرده باشید، بعنوان جدول میشناسه؛ یا هر ارتباطی که با جداول دیگه داشته باشه، یا PrimaryKey و ... EF میره براش جدول میسازه! View_1 شما باید کاملاً مستقل باشه، یا از DataAnnotations های محدودی مثل [Required] و [Display] و ... استفاده کنید و چیزایی که به بانک اطلاعاتی مربوط میشه نیاد توش (مثل Key و HiddenInput و ForeignKey و ...)
کلاً من که ندیده بودم کسی از View بانک اطلاعاتی تو MVC استفاده کنه، نتیجه گرفتین به ما هم بگین ...
موفق باشید.

pooria2c
دوشنبه 10 تیر 1392, 08:01 صبح
مشکل حل شد!!!

تا اونجایی که فهمیدم Linq با View توی پایگاه داده مشکل داره(نمی تونه بخونه حالا علتش و نمی دونم چرا؟؟؟؟؟؟؟؟ )

از Join های داخلی توی Linq استفاده کردم.

اگه جزئیاتش و خواستید بگید تا بذارم.

و از آقای Saeed_m_Farid هم متشکرم به خاطر راهنماییشون.

sanay_esh
دوشنبه 10 تیر 1392, 09:37 صبح
با سلام

تا اونجایی که فهمیدم Linq با View توی پایگاه داده مشکل داره

با توجه به فرموده شما : LINQ با View هیچ مشکلی نداره در صورتیکه واکشی داده شما در Linq شاید اشتباه باشه

از طرفی نقش View در SQL مانند یک جدول است که شما میتوانید با آن مثل یک جدول برخورد کنید !!

pooria2c
دوشنبه 10 تیر 1392, 11:32 صبح
با سلام


با توجه به فرموده شما : LINQ با View هیچ مشکلی نداره در صورتیکه واکشی داده شما در Linq شاید اشتباه باشه...

سلام، View من توی پایگاه داده درست کار می کرد، حتی اون و با دستورات ADO توی MVC فراخوانی کردم و درست کار کرد، و همچنین توی ASP.NET با استفاده از GridView که اون هم درست کار کرد!!

ولی تو Linq to Entity نتونستم این کار و کنم، و مجبور شدم از Join های توی Linq to Entity استفاده کنم. (مشکلم حل شد!!)