一尘不染

在实体框架中使用DataAnnotations

c#

我在VS2010中使用了Entity
Framework,以创建具有属性,firstName,lastName和email的简单人类。如果我想像在本博客文章中那样附加DataAnnotations,则我会遇到一个小问题,因为我的person类是动态生成的。我可以直接编辑动态生成的代码,但是任何时候我必须更新模型时,所有验证代码都会被清除。

第一个本能是创建一个局部类并尝试附加注释,但它抱怨我试图重新定义该属性。我不确定是否可以像使用C
++中的函数声明一样在C#中进行属性声明。如果可以的话,那可能就是答案。这是我尝试过的片段:

namespace PersonWeb.Models
{
  public partial class Person
  {
    [RegularExpression(@"(\w|\.)+@(\w|\.)+", ErrorMessage = "Email is invalid")]
    public string Email { get; set; } 
    /* ERROR: The type 'Person' already contains a definition for 'Email' */
  }
}

阅读 220

收藏
2020-05-19

共1个答案

一尘不染

伙伴类或多或少是您的代码片段前进的方向,除了您的手动编码的部分Person类将具有一个内部类,例如:

[MetadataType(typeof(Person.Metadata))]
public partial class Person {
    private sealed class MetaData {
        [RegularExpression(...)]
        public string Email { get; set; }
    }
}

或者,您可以手动分配Person类和一个单独的Meta类,例如:

[MetadataType(typeof(PersonMetaData))]
public partial class Person { }

public class PersonMetaData {
[RegularExpression(...)]
public string Email;
}

这些是解决方法,具有映射的Presentation类可能更合适。

2020-05-19