次のような単純なスキーマがあります。
アイデアは、ユーザー、部門、およびフローがあるということです。部門ごとに、ユーザーは複数のフローに「スター」を付けて「ブックマーク」することができます (したがって、部門/ユーザーのペアは多くのフローを持つことができます)。
理想的には、次のクラスを使用したいと思います。
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 で行うのは些細なことのように思えますが、解決策を見つけるのに苦労しています。これを行うためのより良い解決策はありますか? モデルの外にロジックを移動するので、andを使用するだけに解決する必要はありません。session.Save(starredFlow)
Query<StarredFlow>()