C# 映射列表字典的替代方案?

C# 映射列表字典的替代方案?,c#,.net,nhibernate,fluent-nhibernate,C#,.net,Nhibernate,Fluent Nhibernate,我有一个简单的模式,如下所示: 其思想是有用户、部门和流程。对于每个部门,用户可以“星型”多个流以“书签”它们(因此部门/用户对可以有多个流) 理想情况下,我希望使用以下类: public class User { public virtual int Id { get; protected set; } public virtual string Name { get; set; } } public class Department { public virtua

我有一个简单的模式,如下所示:

其思想是有用户、部门和流程。对于每个部门,用户可以“星型”多个流以“书签”它们(因此部门/用户对可以有多个流)

理想情况下,我希望使用以下类:

public class User
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
}

public class Department
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual IDictionary<User, IList<StarredFlow>> StarredFlows { get; protected set; }

    public Department()
    {
        this.UserStarredFlows = new Dictionary<User, IList<StarredFlow>>();
    }
}

public class Flow
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }

    protected Flow() { }
}

public class StarredFlow
{
    public virtual int Id { get; protected set; }
    public virtual User User { get; protected set; }
    public virtual Department EntryPoint { get; protected set; }
    public virtual Flow Flow { get; protected set; }
    public virtual string Name { get; protected set; }

    protected StarredFlow() { }

    public StarredFlow(User user, Department ep, Flow flow, string name)
    {
        this.User = user;
        this.EntryPoint = ep;
        this.Flow = flow;
        this.Name = name;
    }
}
但是,NHibernate不支持映射列表字典。我发现了一个涉及将
IList
移动到一个新类并使用组件对其进行映射的方法。遗憾的是,FluentNHibernate不支持对组件进行集合映射(组件映射中没有
hasmy


对于一个NHibernate来说,这似乎是一件小事,但我正在努力寻找解决方案。有更好的解决办法吗?我真的不想只使用
session.Save(starredFlow)
Query()
,因为它们将逻辑移到了模型之外。

您想要做的是肯定不受支持。我并不是说它在理论上不是一个有效的设计,但NHibernate不支持它,将来也不太可能支持它

也就是说,您可以在
部门中使用方法,而不是字典,使用
IQueryable

public IEnumerable<StarredFlow> GetUserStarredFlows(IQueryable<StarredFlow> source,
                                                    User user)
{
    return source.Where(x => x.User == user)
                 .ToList(); //you could skip this depending on your usage
}
public IEnumerable GetUserStarredFlows(IQueryable源代码,
用户(用户)
{
返回source.Where(x=>x.User==User)
.ToList();//根据使用情况,您可以跳过此操作
}
或者(稍微复杂一点)可以插入
IQueryable
或会话

public IEnumerable<StarredFlow> GetUserStarredFlows(IQueryable<StarredFlow> source,
                                                    User user)
{
    return source.Where(x => x.User == user)
                 .ToList(); //you could skip this depending on your usage
}