0

我想使用 NHibernate Automapper 来映射以下类:

public class AdminUser: Identity, IIdentityWithRoles 
{
   public virtual IList<Role> Roles { get; set; }         
}

问题是 Automapper 在角色具有 adminuserId 的模式中创建了多对一关系。但我需要角色是多对多的。注意我无法将 Role 类更改为具有 IList,因为它位于单独的库中并且不了解 AdminUser。

我真正想做的是能够添加一个属性:

public class AdminUser: Identity, IIdentityWithRoles 
{
   [ManyToMany]
   public virtual IList<Role> Roles { get; set; }         
}

这将强制自动映射器执行此操作。是否可以调整我的 Automapper 配置以查找此属性,或者 FluentNhibernate 中是否有内置的东西已经完成了这项工作?

非常感谢您提供的任何帮助。

更新 -

好的,感谢您的指针(赞成),但现在我被困在这里:

public class ManyToManyConvention : AttributePropertyConvention<ManyToManyAttribute>

    {
        protected override void Apply(ManyToManyAttribute attribute, IPropertyInstance instance)
        {
            How can I now say that this property should be a many to may relationship
        }
    }

    public class ManyToManyAttribute : Attribute
    {
    }
4

1 回答 1

3

您必须为默认AdminUser映射编写覆盖:

public class AdminUserOverride : IAutoMappingOverride<AdminUser>
{
  public void Override(AutoMapping<AdminUser> mapping)
  {
    mapping.HasManyToMany(x => x.Roles); // and possibly other options here
  }
}

并将其注册到您的AutoMapping

Fluently.Configure()
  .Database(/* database config */)
  .Mappings(m =>
    m.AutoMappings
      .Add(AutoMap.AssemblyOf<AdminUser>().UseOverridesFromAssemblyOf<AdminUser>()))

如果这种情况不止出现在这个地方,您可以将其替换为Convention,但这有点复杂

于 2011-04-06T17:18:49.580 回答