Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 POCO-如果POCO意味着纯.net类,只有属性,我可以在MVC中编写验证_Asp.net Mvc 3_Model View Controller_Poco_Msdn - Fatal编程技术网

Asp.net mvc 3 POCO-如果POCO意味着纯.net类,只有属性,我可以在MVC中编写验证

Asp.net mvc 3 POCO-如果POCO意味着纯.net类,只有属性,我可以在MVC中编写验证,asp.net-mvc-3,model-view-controller,poco,msdn,Asp.net Mvc 3,Model View Controller,Poco,Msdn,非常新的POCO,找到一些谷歌链接,但发现许多不同的故事。 有些与实体框架、延迟加载等相关,有些说这是一个纯.det类。 至少MSDN 从MSDN定义POCO的链接: 我相信MSDN(一个简单的定义),并假设它是一个纯.NET类 现在让我来谈谈重点。 如果它是纯.net类,内部只有属性,那么它与MVC中的“MODEL”是等边的。 例如 在这个层次上,我很清楚。现在,如果我想在模型中编写自己的验证(条件验证) 使用 验证属性 或 IValidatableObject 如果我没有错的话,这将不是纯

非常新的POCO,找到一些谷歌链接,但发现许多不同的故事。 有些与实体框架、延迟加载等相关,有些说这是一个纯.det类。 至少MSDN

从MSDN定义POCO的链接:

我相信MSDN(一个简单的定义),并假设它是一个纯.NET类

现在让我来谈谈重点。 如果它是纯.net类,内部只有属性,那么它与MVC中的“MODEL”是等边的。 例如

在这个层次上,我很清楚。现在,如果我想在模型中编写自己的验证(条件验证) 使用

验证属性 或

IValidatableObject

如果我没有错的话,这将不是纯粹的.net类。 例子。。。。(如下图所示)

公共类向导:ValidationAttribute,IValidatableObject
{
公共覆盖布尔值有效(对象值)
{
返回base.IsValid(值);
}
公共IEnumerable验证(ValidationContext ValidationContext)
{
抛出新的NotImplementedException();
}
[必需(ErrorMessage=“必需全名”)]
[StringLength(20,ErrorMessage=“用户名必须少于20个字符。”)]
公共字符串用户名{get;set;}
[必需(ErrorMessage=“电子邮件必需”)]
[RegularExpression(“.+@.+\\..+”,ErrorMessage=“电子邮件无效。”)]
公共字符串电子邮件{get;set;}
[必需(ErrorMessage=“需要密码”。)]
[StringLength(20,ErrorMessage=“最多20个字符允许”)]
[数据类型(数据类型.密码)]
公共字符串密码{get;set;}
}
这还是POCO吗? 如果是,它如何包含方法。(与MSDN链接相反) 如果没有,我应该在哪里写下我的验证代码(当然是MVC中的条件验证)。
通过一个例子来寻找一个非常好的答案。

POCOs意味着您不必为了实现功能而从某个框架定义的基类继承。基本上,您可以自由地设计类层次结构

您可以添加自己的方法,无论是it验证还是一些业务逻辑


一个反例是从实体框架中实体的类继承。

POCOs意味着您不必为了实现功能而从框架定义的基类继承。基本上,您可以自由地设计类层次结构

您可以添加自己的方法,无论是it验证还是一些业务逻辑


一个反例是从实体框架中实体的类继承。

链接的文章没有说POCO不能有方法。有关POCO的详细说明,请访问:

。。。该术语用于将简单对象与真实对象进行对比 设计用于复杂、特殊的对象框架,如 作为ORM组件。另一种说法是POCO是对象 不受特定继承或属性的限制 框架

POCO可以有您需要的所有方法或逻辑。POCO和非POCO之间的区别在于,即使不使用特定框架(EF),POCO也是可以始终使用的类,但非POCO只能在链接特定框架或更糟糕的初始化和使用特定框架时使用


对于纯粹主义者来说,数据注释也违反了POCO,因为它们也需要特定的API,但在实用方法中,数据注释是可以的(EF代码中首先用于定义映射的特殊注释除外),因为它们只对实体的验证方式产生依赖性,而对实体的持久化方式没有依赖性(非POCO EF对象)。对持久性的依赖可能要求在您从未期望使用EF的程序集中引用EF—例如,MVC应用程序之类的表示层。

链接文章没有说POCO不能有方法。有关POCO的详细说明,请参见:

…该术语用于将简单对象与 设计用于复杂、特殊的对象框架,如 作为ORM组件。另一种说法是POCO是对象 不受特定继承或属性的限制 框架

POCO可以有您需要的所有方法或逻辑。POCO和非POCO之间的区别在于,即使您不使用特定框架(EF),POCO也是您可以始终使用的类,但非POCO只能在链接特定框架或更糟糕的初始化和使用时使用


对于纯粹主义者来说,数据注释也违反了POCO,因为它们也需要特定的API,但在实用方法中,数据注释是可以的(EF代码中首先用于定义映射的特殊注释除外),因为它们只对实体的验证方式产生依赖性,而对实体的持久化方式没有依赖性(非POCO EF对象)。对持久性的依赖可能要求在程序集中引用EF,而在这些程序集中,您永远不会使用EF—例如,MVC应用程序之类的表示层。

我个人喜欢使用定义该模型所需的基本属性创建POCOs分部类,然后将验证逻辑放在单独的类中。例如:

public partial class Wizard
{
    public string UserName { get; set; }
    public string EmailAddress { get; set; }
}
然后,如果我想将验证添加到
用户名

public partial class Wizard
{
    [Required]
    [StringLength(20)]
    public string UserName { get; set; }
}
我知道编译器只是合并了这两个类,你可能在重复属性,但我认为这是最干净的方法


另一种选择是使用属性。

我个人喜欢使用定义该模型所需的基本属性创建POCOs分部类,然后将验证逻辑放入单独的类中。例如:

public partial class Wizard
{
    public string UserName { get; set; }
    public string EmailAddress { get; set; }
}
然后,如果我想将验证添加到
用户名

public partial class Wizard
{
    [Required]
    [StringLength(20)]
    public string UserName { get; set; }
}
我知道编译器只是合并了这两个类,你可能在重复属性,但我认为这是最干净的方法


另一种选择是使用属性。

这不是我要寻找的答案?你在两边都说了(我可以添加逻辑,另一个是不继承类…),siml