gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:52:10 26 4
gpt4 key购买 nike

我有一个看起来像这样的简单模式:

这个想法是有用户、部门和流程。对于每个部门,用户可以为多个流“加注星标”以将它们“添加为书签”(因此部门/用户对可以有多个流)。

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

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 不支持列表的映射字典。我找到了一个 similar question/answer这涉及移动 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
}

或者(有点复杂)您可以注入(inject) IQueryable 或 session 。

关于c# - 映射列表字典的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com