我正在开发MVC应用程序,其中,我试图创建由MVC应用程序生成的类的部分类,让我们说Location类。
现在我想在新的类文件中创建Location类的分部类。
以下类代码由MVC的位置代码自动生成。
namespace CRM
{
public partial class Location
{
public int Id { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
}
}
我添加了新的类文件,其中包含上述文件的部分类
namespace CRMEntities.Partial_Class
{
public interface ILocation
{
[StringLength(50, ErrorMessage = "Region can accept maximum 50 characters.")]
string Region { get; set; }
[Key]
int Id { get; set; }
[Required]
string Name { get; set; }
string Remark { get; set; }
}
public partial class Location : ILocation
{
}
}
它给出了以下错误...
CRMEntities.Partial_Class.Location' does not implement interface member 'CRMEntities.Partial_Class.ILocation.Name
答案 0 :(得分:3)
首先,您不需要这样做,我理解您正在尝试进行验证吗?想想,EF生成的对象不是ViewModel,它们是域模型。数据注释应该在View Model中,而不是域模型。
大多数情况下,经常误用是使用域模型作为视图模型,但它不是很正确。因为有时候,视图模型需要多个域模型来为您的UI提供数据。
因此,为了分离关注点,您需要使用域模型定义不同的View Model。 示例:您有Location类,需要添加LocationViewModel类并在此处放置数据注释。
您可以手动映射或使用AutoMapper进行视图模型和域模型之间的映射。 另一种解决方案是你可以使用Fluent Validation,这样就不需要更多的部分类来进行验证。
答案 1 :(得分:1)
您在问题中未显示ILocation
的定义,但错误表明Location.Name
属性的声明与ILocation.Name
成员的声明不同。
编辑:您的两个部分类似乎位于两个不同的命名空间中,因此它们实际上是两个完全不同的类,而不是同一个类的两个部分。这可以解释编译器错误。
话虽如此,我同意另一个答案(+1!),你应该在视图模型上进行UI验证。