实体框架 6 重用数据注释

2024-02-07

我已经寻找了一段时间的明确解决方案,但尚未得出结论。我想在数据模型类上仅指定一次数据注释,并让 UI 从视图模型类中看到这些注释,而无需再次指定它们。为了说明我的观点,假设我有一个 UserAccount 类......

public class UserAccount
{
    [Display(Name = "Username", Prompt = "Login As"), Required()]
    string UserName { get; set; }
    [Display(Name = "Password", Prompt = "Password"), Required(), DataType(DataType.Password), StringLength(255, MinimumLength = 7, ErrorMessage = "The password must be at least 7 characters")]
    string Password { get; set; }
}

现在我想指定一个视图模型,其中包含一个密码确认字段,该字段不会存储在数据库和可能的其他数据模型中,但我不想再次指定所有数据注释属性。这是为了寻找最佳实践,但也需要维护多个声明,并且在某些时候一个声明会被修改,而其他声明则不会。

我研究过接口/继承解决方案,但由于各种原因,这并没有真正完全解决它。另一种潜在的解决方案可能是在视图模型类(或属性)上有一个属性来表示继承属性...但我还找不到任何适合于此的内容。

有没有人有任何好主意或以合适的方式实现这一点?


您可以使用此属性来装饰视图模型类:

[MetadataType(typeof(YourModelClass))]
public class YourViewModelClass
{
   // ...
}

假设两个类具有相同的属性,注释将被正确继承。

See: MSDN 中的 MetadataTypeAttribute 类 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx了解更多信息。

注意:在 MDSN 注释中,他们解释了为现有模型类添加额外元数据的用途,但这适用于您的情况。事实上,您可以完全做到这一点:注释您的 ViewModel,并将其应用到模型的部分类。或者甚至创建一个应用于模型和视图模型中的实体的单个好友类。使用任何此选项,任何类都可以“定义”自己的注释并从伙伴类“继承”其他注释。

重要的提示:该解决方案与 Hoots 接受的解决方案有很大不同,因为该解决方案被 EF 或 MVC 等框架识别,以创建模型或提供自动数据验证。 Hoots 的解决方案必须手动使用,因为框架不会自动使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架 6 重用数据注释 的相关文章

  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • @RenderBody() 该怎么办?

    我有一个 ASP NET MVC 3 应用程序JQuery UI Tabs 我有一个主布局页面 layout cshtml 代码如下 大师 layout cshtml需要一个 RenderBody 代码 既然是必需的 那我该怎么办呢 我想我
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 如何使用多个项目将大型 ASP.NET MVC 站点分成多个部门?

    假设我有一个非常大的网站 例如 amazon com 我想在整个网站上使用 asp net mvc 但拥有一个包含数百名贡献者的大型项目是不切实际的 我想将工作分成每个部门的书籍 工具 玩具 杂货等项目 然后 当他们构建并交付新版本时 我只
  • 如何将带有自定义分配器的 std::vector 传递给需要带有 std::allocator 的函数?

    我正在使用外部库 pcl 因此我需要一个不会更改现有函数原型的解决方案 我正在使用的一个函数生成一个std vector
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • 使用 javascript/jquery 从数据库格式化日期的正确方法

    我正在调用包含日期时间数据类型的数据库 日期看起来像这样 2005 05 23 16 06 00 000 当用户从列表中选择某个项目时 我想在表格中显示它 我调用我的控制器操作并返回所有时间的 Json 并将它们放入表中 问题是日期完全错误
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代

随机推荐

  • 将大型 DataFrame 输出到 CSV 文件的最快方法是什么?

    对于 python pandas 我发现 df to csv fname 的工作速度约为每分钟 1 百万行 有时我可以将性能提高 7 倍 如下所示 def df2csv df fname myformats sep function is
  • Task.Convert 扩展方法有用还是有隐患?

    我正在为 Google Cloud API 编写客户端库 该库具有相当常见的异步帮助器重载模式 做一些简短的同步工作来设置请求 发出异步请求 以简单的方式转换结果 目前我们正在使用异步方法 但是 就优先级而言 转换await的结果最终会很烦
  • 输入流迭代器和异常

    几天前 我正在研究 istream 迭代器和异常处理 我对此感到好奇 include
  • SQL Server 表中列的最佳命名

    您会选择以下三个选项中的哪一个作为 SQL Server 表中的列名 为什么 年初至今工资 YTDWages YtdWages 跟进 SSN Ssn 社会安全号码 对于第一个 我会使用 WagesYTD 因为年初至今是工资的修正因素 对于第
  • 如果我的部署目标是8.0,我们是否需要为“armv7”和“arm64”编译iOS应用程序?

    我的应用程序支持iOS8 0及以上版本 而且我知道从iOS7开始它的arm64位架构 在这种情况下 我们是否需要编译 armv7 和 arm64 切片的二进制文件 如果我单独编译arm64 我可以减少我的应用程序大小 这是正确的方法吗 请帮
  • Oracle 从表中随机行

    我找到了从 Oracle 表中选择随机行的解决方案 实际上以随机方式对行进行排序 但您只能获取第一行以获得随机结果 SELECT FROM table ORDER BY dbms random value 我只是不明白它是如何工作的 ORD
  • 反应本机 RCTBridgeModule 的初始化

    我想知道向我的 RCTBridgeModule 添加初始化步骤的最佳方法是什么 我当前的解决方案是声明一个必须在 AppDelegate 内部调用的方法 是否有任何其他 更好的解决方案不需要模块的最终消费者向其 AppDelegate 添加
  • 埃拉托斯特尼素数筛法到一百万 C++

    所以我需要有关我的代码的帮助 由于某种原因 当我输入超过 500 000 的数字时 它不断崩溃 这是确切的分配 实现埃拉托色尼筛法并用它来查找所有素数 数量小于或等于一百万 使用结果 证明哥德巴赫猜想对于 4 到 4 之间的所有偶数 100
  • 基于单选按钮选择的 jQuery DatePicker 更新选项

    我试图让 jquery 日期选择器在选择不同的单选按钮时进行更新 div style padding bottom 50px div
  • 使用 WebDriver 处理不受信任的 SSL 证书

    我在使用 Java 中的 webdriver 处理不受信任的 SSL 证书时遇到了困难 我创建了 Firefox 配置文件 如下所示 FirefoxProfile profile new FirefoxProfile profile set
  • InstallShield - 相对文件路径

    如何将文件添加到 InstallShield 组件并指定 InstallShield 项目的相对路径 以便轻松在不同计算机上编译项目 使用免费的 VS 限量版 InstallShield 设置自定义路径看起来不太可能 因此 在只有几个预定义
  • Drupal:在网络表单中的提交按钮上方添加免责声明文本

    有没有一种简单的方法来修改 webform form tpl php 模板以在 Drupal Web 表单中的提交按钮上方显示免责声明文本 我可以在按钮下方添加文本 但不知道如何将按钮与其他元素分开以在它们之间添加文本 即 form ele
  • 使用 @Named 和未命名参数从 Javascript 客户端库进行调用是没有意义的

    我有一个Cloud Endpoints方法看起来像这样 HTTP POST ApiMethod name hylyts insert public Hylyt insertHylyt Named url String url Hylyt h
  • 将bind1st 用于通过引用获取参数的方法

    我有一个这样的结构 struct A void i int i void s string const s 现在当我尝试这个时 bind1st mem fun A i a 0 bind1st mem fun A s a 第一行编译正常 但第
  • 检查 SQL 中的日期是否重叠

    我有一个表 tblBranchTimingEntry BranchEntryID fromDate toDate SundayIn 24 2015 01 01 00 00 00 000 2015 01 31 00 00 00
  • Airflow k8s 运营商 xcom - 握手状态 403 禁止

    当我使用运行 docker 镜像时KubernetesPodOperator在气流版本 1 10 中 一旦 pod 成功完成任务 airflow 就会尝试通过 k8s 流客户端连接到 pod 来获取 xcom 值 以下是我遇到的错误 201
  • 如何设置 RStudio 服务器以在 AWS 上使用 SSL 运行?

    我有兴趣在 AWS 实例上运行 RStudio 服务器并通过 SSL 加密连接访问服务器 我该如何设置 启动一个使用 Ubuntu 作为操作系统的 AWS 实例 以及一个安全组 除了通过端口 22 的 SSH 连接之外 该安全组还具有端口
  • BLE获取广告包中编码的uuid

    我正在尝试获取 ble 设备的 UUID 我遵循 Android 开发人员指南 到目前为止我只能获取设备名称和 RSSI 我试图获取扫描方法中设备的 Uuid 如下所示 public void onLeScan final Bluetoot
  • 关于glTexImage3D

    对于 3D 纹理 对于三维纹理 z 索引指的是第三维 这究竟意味着什么 对于二维数组纹理 z 索引指的是切片索引 如果我们有 4 层 2D 纹理 那么如果 z 2 它将引用第二个 2D 纹理切片 那么 当我们有目标 GL TEXTURE 3
  • 实体框架 6 重用数据注释

    我已经寻找了一段时间的明确解决方案 但尚未得出结论 我想在数据模型类上仅指定一次数据注释 并让 UI 从视图模型类中看到这些注释 而无需再次指定它们 为了说明我的观点 假设我有一个 UserAccount 类 public class Us