簡體   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