【问题标题】:How to use remote attribute in entity framework classes如何在实体框架类中使用远程属性
【发布时间】:2014-07-22 20:18:30
【问题描述】:

在我的应用程序中,我使用数据库优先方法创建我的 EDMX 文件。

我为那里的所有表生成了类。

我可以使用Required、Display、StringLength、RegularExpression等注释。在那里。

我知道在我的 MVC 模型中,我可以使用名为“Remote”的注释来验证我的实体属性。

有没有办法在实体类中使用这个“远程”属性?还是可以通过其他方式创建自定义注释?

更新: 我有这样的 ViewModel

    public Exam Exam { get; set; }
    public TestInfo Test { get; set; }

Exam 和 TestInfo 都是实体框架生成的实体类。

实体类“Exam”中有属性“ExamName”,我想验证其是否存在重复名称。

【问题讨论】:

标签: c# entity-framework asp.net-mvc-4 data-annotations


【解决方案1】:

Remote 是一个数据注释,用于验证用户在 UI 中输入的输入。它对您的一种操作方法(您可以指定)进行 ajax 调用,并需要一个结果值来说明您的系统中是否已经存在此数据。

您可能需要为您的视图创建一个新的视图模型,而不是使用实体框架为您的视图创建的实体类。那么你可以有Remote 属性。在您的操作方法中,您可以处理实际实体以检查数据的存在。

public class RegisterVM
{
    [Required]  
    [Remote("IsAvailable", "Validation")]      
    public override string UserName { get; set; }
}

现在您可以使用IsAvailable 操作方法来检查用户名是否存在。还要确保现在您的 Register 视图被强类型化到这个新的 RegisterVM 视图模型。

@model RegisterVM
@using(Html.Beginform())
{
  // your form controls

}

在实体类上拥有Remote 属性是没有意义的。它应该在视图模型上。否则你会混淆!

【讨论】:

  • 我想在我的实体类中做。不在 ViewModel 中
  • 为什么要在你的实体类中做呢?你想做什么?
  • 我正在尝试查找名称是否已经存在。如果存在则它应该给出错误。
  • 所以使用视图模型并在您的IsAvailable 操作方法中查询原始实体以检查它是否存在。
  • @vaibhavshah Remote 属性还指定验证方法所在的端点。把它放在模型上是没有意义的(imo)。该模型不应该关心这一点。 Viewmodel 似乎好多了。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多