وجود بعض المشاكل مع metadatatype والتعليقات التعليقات التوضيحية و EF
-
27-09-2019 - |
سؤال
أحاول استخدام تعليقات البيانات للتحقق من صحة نماذج إطار الكيان الخاصة بي باستخدام فئات جزئية.
قيل لي في هذا المادة (MSDN), ، يجب أن تكون الفئة الجزئية في نفس مساحة الاسم مثل نموذج البيانات. يقع نموذج البيانات الخاص بي في entityframeworkdataprovider ، وبالتالي فإن صفي الجزئي الذي يقع في myapp.backend.models يبدو مثل هذا:
using System.ComponentModel.DataAnnotations;
namespace EntityFrameworkDataProvider
{
[MetadataType(typeof(ItemMetaData))]
public partial class Item { }
public class ItemMetaData
{
[ScaffoldColumn(false)]
public object CreateDate { get; set; }
[Required]
public string DisplayName { get; set; }
[Required]
public string Description { get; set; }
}
}
أتحقق من صحة النموذج في فئة وحدة التحكم الخاصة بي مثل هذا:
[HttpPost]
public ViewResult Edit(Item item)
{
if (!TryUpdateModel(item))
{
return View(item);
}
return View("Details", item);
}
يجمع دون أخطاء. ومع ذلك ، عند محاولة تحرير عنصر ما هذا الخطأ هو ما أحصل عليه:
رسالة خطأ التحويل البرمجي: CS0433: نوع "entityframeworkdataprovider.item" موجود في كل من "path.dll" و "path.dll"
أعتقد أن فئة العناصر يجري تجميعها مرتين أو شيء من هذا القبيل. كيف ينبغي منع هذا الخطأ؟
المحلول
عمل وحدة التحكم الخاصة بك خاطئ. يجب ألا تستخدم معلمات الإجراء و TryUpdateModel
على نفس النوع لأنه سيتم إدراج رسائل الخطأ مرتين في حالة النموذج. يجب أن يبدو أفعالك هكذا بدلاً من ذلك:
[HttpPost]
public ViewResult Edit(Item item)
{
if (!ModelState.IsValid)
{
return View(item);
}
return View("Details", item);
}
فيما يتعلق برسالة خطأ المترجم التي تحصل عليها لم تقدم معلومات كافية حتى أتمكن من مساعدتك. تأكد من أن فئة العنصر هذه غير محددة في مواقع مختلفة وأنها بالفعل partial
في كل واحد .cs
ملف تصادفه. أظن أنه في مكان ما لديك Item
فئة محددة وهي ليست جزئية. ما يجب أن تكون على دراية به هو أنه إذا تم تعريف فئة العنصر هذه في مجموعة منفصلة ، حتى لو تم تمييزها بجزئي ، بمجرد تجميعها ، لم تعد فكرة الجزئية موجودة. تعمل الطبقات الجزئية فقط في نفس التجمع.