使用ActiveRecord,您可以定义这样的类:
class Contact
{
private String _name;
public String Name
{
get { return _name; }
set
{
if (value == String.IsNullOrWhiteSpace())
throw new ArgumentException(...);
else
_name = value;
}
}
public Boolean Validate() { ... /* check Name is unique in DB */ }
public Boolean Save() { ... }
public static List<Contact> Load() { ... }
}
Run Code Online (Sandbox Code Playgroud)
虽然这很简单,但我发现我的课程变得非常臃肿,伴随着大量的逻辑组合!
使用分层/域设计,您可以定义相同的类,如:
class Contact
{
[Required(AllowEmptyStrings=false)]
public String Name { get; set; }
}
class ContactService : IService
{
public List<Contact> …Run Code Online (Sandbox Code Playgroud) 我正在尝试让EF 4.1与Repository,UnitOfWork一起工作,将实体与EF分离并进行验证.
我按照本指南将我的POCO实体从EF模型中分离出来,现在我按照本指南实现验证(使用IValidatableObject).
我的解决方案包括:
但我正在用验证打砖墙:
有人在这里有任何指示吗?我已经发布了下面的代码......
Contacts.Repository.ContactsDbContext.cs:
namespace Contacts.Repository
{
public partial class ContactsDbContext : DbContext
{
public DbSet<Contact> Contacts { get; set; }
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
{
items.Add("Context", this);
return base.ValidateEntity(entityEntry, items);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Contacts.Entities.Contact.cs:
namespace Contacts.Entities
{
public partial class Contact
{
public string Name { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
Contacts.Validation.Contact.cs包含: …