验证实体属性C#

时间:2010-03-03 12:40:09

标签: c# .net entity-framework reflection

我有一个人和一个组织实体: 人看起来像这样:

public class PersonEntity
{
public string FirstName {get;set;}
public string LastName {get;set;}

public bool IsValid(PersonEnum Attribute, string AttributeValue)
{
if(attribute == PersonEnum.FirstName && AttributeValue == null)
return false;
if(attribute == PersonEnum.LastName && AttributeValue == null)
return false;

return true;
}
}

我有一个PersonEnum //仅为支持IsValid方法而创建。

public enum PersonEnum
{
FirstName, LastName
}

同样,组织有一个实体和一个枚举。

我想创建一个Helper类,如下所示,在一个地方进行所有验证,我想传递Class(Entity)的名称,其成员(Enum)和值:

public class Helper
{
//Not sure how to pass A Class def and an attribute. 
public static ValidateEntityAttribute(*[EntityEnum]*,*[EntityEnum]*, Value)
{
.. do something that looks at the Entity and call it's IsValid method.
}
}

可以不使用Reflection完成,我也希望这是通用的,所以我可以将它用于我的所有实体。

任何Suggesstions?

3 个答案:

答案 0 :(得分:2)

强烈建议采用另一种方式,因为你的设计会让你更难改变你的课程。要更改类,您必须更新不同类中的验证方法,以及参数的枚举。

更好的方法是在Rule Violation教程中设置NerdDinner方案。

答案 1 :(得分:0)

我同意C. Ross;你需要大量的反思来使这个工作,并没有编译时间支持所以永远。以这种方式构建它需要花费大量时间并且需要花费大量时间来维护。

您最好使用验证框架,Mattias也建议。有几个框架可供选择。我个人是Microsoft Enterprise Library Validation Application Block(VAB)的粉丝,但它有一个陡峭的学习曲线。另一个不错的选择是.NET 3.5 DataAnnotations,它具有更少的功能,但更容易学习。

如果您对VAB感兴趣,我建议您先下载Hands On Lab并阅读随附的ValidationHOL.pdf教程。它给出了VAB可以实现的良好印象。我写了很多关于将VAB与ADO.NET Entity Framework集成的文章。您可以开始阅读here

祝你好运

答案 2 :(得分:0)

企业库验证非常好。我会推荐它。 如果你想为一个小项目做一些轻量级的事情,那么就是一个解决方案:

您将不得不使用反射,但让我们看看如何以最简单的方式实现这一目标......

public class Helper 
{
public static ValidateEntityAttribute(Type objectType, Enum objectEnum, object Value) 
{ 
if(objectType.GetMethod("IsValid", BindingFlags.NonPublic).Invoke(null, BindingFlags.NonPublic, null, new object[{objectEnum, Value}], null))
throw new Exception("Invalid entry");
} 
}