创建部分类时出错

时间:2012-08-04 11:52:15

标签: asp.net-mvc-3 entity-framework

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

2 个答案:

答案 0 :(得分:3)

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

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

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

您可以手动映射或使用AutoMapper进行视图模型和域模型之间的映射。 另一种解决方案是你可以使用Fluent Validation,这样就不需要更多的部分类来进行验证。

答案 1 :(得分:1)

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

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

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