使用属性覆盖FluentNhibernate AutoMapper的许多许多
本文关键字:许多许 AutoMapper FluentNhibernate 属性 覆盖 | 更新日期: 2023-09-27 17:49:30
我想使用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执行此操作。是否可以调整我的Automapper配置来查找此属性,或者是否有一些内置到FluentNhibernate中已经完成了这项工作?
非常感谢你提供的任何帮助。
UPDATE——
好的,谢谢你的指针(向上投票),但现在我被困在这里:
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
{
}
您必须为默认的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
替换它,但这有点复杂。