相关疑难解决方法(0)

实体框架IValidatableObject参考DbContext

我正在尝试让EF 4.1与Repository,UnitOfWork一起工作,将实体与EF分离并进行验证.

我按照指南将我的POCO实体从EF模型中分离出来,现在我按照指南实现验证(使用IValidatableObject).

我的解决方案包括:

  • Contacts.Repository [引用EF和Contacts.Entities]:
    • Contacts.edmx
    • ContactsDbContext.cs
  • Contacts.Entities [无参考]:
    • Contact.cs(Contacts.Entities.Contact partial class)
  • Contacts.Validation [引用Contacts.Entities和Contacts.Repository]
    • Contact.cs(Contacts.Entities.Contact partial class)

但我正在用验证打砖墙:

  1. 我无法向Contacts.Entities添加验证逻辑,因为它会导致带有Contacts.Repository的循环引用(contact.Validate(...)需要使用ContactsDbContext).所以我创建了一个单独的Contacts.Validation项目.
  2. 但是,这意味着将Contact类与部分类分开,以在Contacts.Entities和Contacts.Validation中定义Contact.代码不再编译,因为您无法在不同的程序集中定义分部类.

有人在这里有任何指示吗?我已经发布了下面的代码......

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包含: …

validation entity-framework-4.1 dbcontext

6
推荐指数
1
解决办法
4677
查看次数