将审计列添加到Fluent NHibernate多对多联结表

时间:2010-10-25 03:50:34

标签: .net nhibernate fluent-nhibernate many-to-many audit

我正在使用Fluent NHibernate从.Net实体类生成数据库模式。我有两个类UserPermission,它们具有多对多关系,Fluent NHibernate正在数据库中正确生成联结表UsersToPermissions

正如预期的那样,联结表正在存储主键UserIdPermissionId。我想要的是还要在此表中附加审核信息,例如CreatedDateUpdatedDate。我已经使用NHibernate documentation中描述的拦截器在非连接表上实现了这一点。

如何在UsersToPermissions表上实施审核列?

1 个答案:

答案 0 :(得分:5)

直接不可能,因为关系没有属性。

最简单的方法是将联结表映射为实体,并使用LINQ到对象投影边以便于使用。

例如,假设我们调用中间实体UserPermission

class User
{
    // Real relationship, mapped as bag or set with one-to-many UserPermission
    protected virtual ICollection<UserPermission> UserPermissions { get; set; }

    public virtual IEnumerable<Permission> Permissions
    {
        get { return from up in UserPermissions select up.Permission; }
    }

    public void Add(Permission permission)
    {
        UserPermissions.Add(new UserPermission
                            {
                                User = this,
                                Permission = permission
                            });
    }
}

如果需要,权限可以完全相同。