繁体   English   中英

映射列表字典的替代方法?

[英]Alternative to mapping a dictionary of lists?

我有一个简单的架构,如下所示:

这个想法是有用户,部门和流程。 对于每个部门,用户可以“加注”多个流程以“标记”它们(因此部门/用户对可以有许多流程)。

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

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;
    }
}

允许非常文字的代码:

var userStarredFlowsForDepartment = department.StarredFlows[currentUser];

但是,NHibernate不支持映射列表的字典。 我发现了一个类似的问题/答案 ,涉及将IList<StarredFlow>移动到一个新类并使用组件映射它。 遗憾的是,FluentNHibernate不支持使用组件进行集合映射(组件映射中没有HasMany )。

对于NHibernate来说,这似乎是一件微不足道的事情,但我很难找到解决方案。 这样做有更好的解决方案吗? 我真的希望没有解决, 只是使用session.Save(starredFlow)Query<StarredFlow>()因为他们移动的逻辑模型之外。

你想做什么绝对不支持。 我并不是说它不是理论上有效的设计,但是NHibernate不支持它,它不太可能在将来这样做。

也就是说,你可以在Department使用一个方法而不是一个字典,取一个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
}

或者(有点复杂)你可以注入IQueryable或会话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM