【问题标题】:ef5 database first data annotationef5 数据库第一个数据注释
【发布时间】:2012-10-24 20:37:41
【问题描述】:

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

但是,由于生成的眼镜可以重新生成,因此我无法将数据注释详细信息用于帮助验证。

我见过一些使用 MetaData 和部分类的代码 sn-ps,但我想知道是否有人知道一个小的可编译示例,我可以查看并分解以更好地了解各种类如何相互链接。

非常感谢您的帮助。 戴夫

【问题讨论】:

  • 您想要执行什么样的验证以及您正在考虑什么样的验证机制(自定义验证属性、IValidatableObject 等)?我认为您有几个选项(伙伴类、部分类、更新 T4 模板),具体取决于您要验证的内容以及验证方式。
  • 嗨,帕维尔。很抱歉没有尽快回复,但我没有收到电子邮件通知。基本上我想使用的验证类型是标准的 [Required] 等数据注释验证,以便 View 可以自动使用它。非常感谢您的回复。戴夫
  • 非常感谢 Pawel。从快速浏览(并尝试将项目更新到 VS2012)看起来正是我所需要的。稍后我将进行更多实验。

标签: entity-framework visual-studio-2012 data-annotations ef-database-first


【解决方案1】:

您可以通过扩展模型来实现您所需要的。假设 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; }
    }
}

并且您想要做一些工作来保留您的数据注释和属性。所以,请按照以下步骤操作:

首先,在某个位置(任意位置,但最好在Models)添加两个类,如下所示:

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 生成的类相同。

通过这个,你的属性再也不会丢失了......

【讨论】:

  • 我打算提交编辑,但我不能,因为编辑不会至少有 6 个字符长。无论如何,在最后一个代码示例中,类名应该是 NewsAttribs 而不是 NewsAttrib。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多