我正在尝试使用数据注释来使用分部类来验证我的实体框架模型。
我在这个article (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:'long-path.DLL'和'long-path.DLL'中都存在'EntityFrameworkDataProvider.Item'类型
我猜Item类正在编译两次或者其他什么。如何防止这种错误?
答案 0 :(得分:2)
您的控制器操作错误。您永远不应在同一类型上使用操作参数和TryUpdateModel
,因为它会在模型状态下插入错误消息两次。你的行动应该是这样的:
[HttpPost]
public ViewResult Edit(Item item)
{
if (!ModelState.IsValid)
{
return View(item);
}
return View("Details", item);
}
至于您收到的编译器错误消息,您没有提供足够的信息,以便我可以帮助您。确保此Item类未在不同位置定义,并且在您遇到它的每个partial
文件中确实.cs
。我怀疑你定义的Item
类的某个地方并不偏袒。您应该注意的是,如果此Item类在单独的程序集中定义,即使它被标记为partial,一旦编译,部分的概念就不再存在。部分类仅在同一个程序集中起作用。