关于如何“创建自己的模型”有a lot of examples。使用DataAnnotations标记它们。 Scott Guthrie解释了validate your model使用ORM时的方法。我找不到的是你的模型实际上是从外部DLL进来的。你如何验证它?
示例:
/* Class coming in from an third-party DLL file. */
public class Person
{
public string Name{get;set;}
public int Age {get;set;}
}
我正在考虑的解决方案:继承外部类,然后将[MetadataType]应用于继承的类。
[Metadata(typeof(Person2_Validation))]
public class Person2:Person{}
public class Person2_Validation
{
[Required,Stringlength(50,ErrorMessage="Name required"]
public string Name{get;set;}
[RegularExpression("([0-9]+)")]
public int Age
}
有更好的方法吗?
答案 0 :(得分:4)
您可以创建模型并使用Mapper(如AutoMapper或EmitMapper或ValueInjecter)在对象之间进行映射,并根据映射模型进行验证。
当您需要将对象传回时,您可以在模型与收到的模型之间进行映射。
这与ASP.NET MVC中的ViewModel方法非常相似。
所以它是这样的:
A类(来自DLL的类) B级(您的模型)
您可以在B上设置所有注释,并创建所需的任何属性。
你使用的是B.当你从存储库/来源获得某些东西时,你映射(复制所有相关的值)A => B并发送它(比如在视图中作为模型)。
当你收到B回来时,你验证它,然后以另一种方式映射B => A,并将其发送到存储库/服务。
顺便说一句:我建议使用这种方法,即使模型A是你的类。答案 1 :(得分:2)
@Linkgoron回答是真的。您正在搜索视图模型与域模型。我们需要认为来自dll的模型是一个域模型,并将其映射到我们自己的视图模型,就像我们在处理自己的存储库/持久性时所做的那样。这是一种最佳做法。不用担心映射器,它会自动映射。
请参阅@Nick DeVore回答为什么在此处查看模型而不是域模型 Why Two Classes, View Model and Domain Model?
以及
Bestpractice - Mixing View Model with Domain Model
您的问题可能是其中一个原因:)