1

我正在开发 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

4

2 回答 2

3

首先,您不需要这样做,我的理解是您正在尝试进行验证,对吗?想想看,EF生成的对象不是ViewModel,而是领域模型。数据注释应该在视图模型中,而不是域模型中。

大多数情况下,经常误用的是将域模型用作视图模型,但它并不正确。因为有时,视图模型需要多个领域模型来为您的 UI 提供数据。

因此,为了分离关注点,您需要定义与域模型不同的视图模型。示例:您有 Location 类,您需要添加 LocationViewModel 类并在此处放置数据注释。

您可以手动映射或使用AutoMapper在视图模型和域模型之间进行映射。另一种解决方案是您可以使用Fluent Validation,这样,无需为了验证而拥有更多的部分类。

于 2012-08-04T14:49:44.967 回答
1

您没有ILocation在问题中显示 of 的定义,但错误表明该Location.Name属性的声明方式与ILocation.Name成员不同。

编辑:您的两个部分类似乎位于两个不同的命名空间中,因此它们实际上是两个完全不同的类,而不是同一类的两个部分。这将解释编译器错误。

话虽如此,我确实同意另一个答案(+1!),您应该在视图模型上进行 UI 验证。

于 2012-08-04T12:28:48.490 回答