Entity framework ef5数据库第一数据注释

Entity framework ef5数据库第一数据注释,entity-framework,visual-studio-2012,data-annotations,ef-database-first,Entity Framework,Visual Studio 2012,Data Annotations,Ef Database First,我正在用VS2012启动MVC4。我还将EF5与创建类的“数据库优先”方法结合使用 但是,由于生成的眼镜可以重新生成,我无法将数据注释细节用于协助验证 我见过一些使用元数据和分部类的代码片段,但我想知道是否有人知道一个小的可编译示例,我可以查看并分析它,以便更好地理解vasious类是如何相互关联的 非常感谢你的帮助。 Dave通过扩展模型,您可以实现所需的功能。假设EF为您生成了以下实体类: namespace YourSolution { using System; usin

我正在用VS2012启动MVC4。我还将EF5与创建类的“数据库优先”方法结合使用

但是,由于生成的眼镜可以重新生成,我无法将数据注释细节用于协助验证

我见过一些使用元数据和分部类的代码片段,但我想知道是否有人知道一个小的可编译示例,我可以查看并分析它,以便更好地理解vasious类是如何相互关联的

非常感谢你的帮助。
Dave

通过扩展模型,您可以实现所需的功能。假设EF为您生成了以下实体类:

namespace YourSolution
{
    using System;
    using System.Collections.Generic;

    public partial class News
    {
        public int ID { get; set; }
        public string Title { get; set; }                  
        public int UserID { get; set; }

        public virtual UserProfile User{ get; set; }
    }
}
您需要做一些变通,以保留您的数据注释和属性。因此,请遵循以下步骤:

首先,在某些地方(无论您想在哪里,但最好在
模型中)添加两个类,如下所示:

namespace YourSolution
{
    [MetadataType(typeof(NewsAttribs))]
    public partial class News
    {
         // leave it empty.
    }

    public class NewsAttribs
    {            
        // Your attribs will come here.
    }
}
然后将您想要的属性和属性添加到第二个类-
NewsAttribs
此处:

public class NewsAttrib
{
    [Display(Name = "News title")]
    [Required(ErrorMessage = "Please enter the news title.")]
    public string Title { get; set; }

    // and other properties you want...
}
注意事项:

1) 生成的实体类和您的类的名称空间必须相同-此处
YourSolution

2) 您的第一个类必须是
partial
,其名称必须与EF生成的类相同


通过此过程,您的属性再也不会丢失…

您希望执行什么样的验证,以及您在考虑什么样的验证机制(自定义验证属性、IValidatableObject等)?我认为您有一些选项(伙伴类、部分类、更新T4模板),这取决于您想要验证的内容和验证方式。很抱歉没有尽快回复,但我没有收到电子邮件通知。基本上,我想要使用的验证类型是标准的[Required]etc数据注释验证,以便视图可以自动使用它。非常感谢您的回复。DaveI认为你需要看看buddy的课程。看看这里:,和(搜索“buddy”)非常感谢你的Pawel。从快速查看(并尝试将项目更新为VS2012)来看,它正是我所需要的。我将在稍后进行更多的实验。我本来打算提交一个编辑,但我不能提交,因为编辑至少不会有6个字符长。无论如何,在上一个代码示例中,类名应该是NewsAttribs而不是NewsAttrib。