0

タスク リストに似たシステム Web アプリケーションを作成しています。

  • ユーザーはタスクを作成できます
  • ユーザーは、任意のタスク内にタスクを作成できます。
  • その後、ユーザーはそのタスク内にタスクを作成できます
  • ユーザーは最初のタスクを表示し、それにリンクされているすべてのタスクを表示できます。

簡単な親子関係を作成しました。最初のレベルを超えると、それは不可能だとわかりますか?

元の親タスクと、その中の他のすべての親タスクと子タスクを表示できるようにしたいと考えています。

これまでのところ、Task にはタスクの Icollection があります。

私ができるようにしたいのは、元の親クラスのすべての兄弟を表示することです。

   modelBuilder.Entity<Task>()
            .HasMany(x => x.Children)
            .WithOptional()
            .HasForeignKey(x => x.ParentID);
4

2 に答える 2

1

データベースにクエリを実行するときは、次のようにします。

var tasks = from t in db.Tasks.Include("Parent")
            where t.Id //... your logic here
            select t;

Task クラスを拡張して親プロパティを含める必要があります。

public virtual Task Parent { get; set; }

次に、関係をマッピングします。

modelBuilder.Entity<Task>()
            .HasOptional(x => x.Parent)
            .WithMany(x => x.Children)
            .HasForeignKey(x => x.ParentID);

上記のクエリは、返されたすべての Task の親 Task を取得するように EF に指示します。

お役に立てれば。

于 2013-04-19T19:08:20.697 に答える
0

1 つの解決策は、外部キーを使用することです。1 つの外部キーは IDRootTask で、もう 1 つの外部キーは IDParentTask です。

最初の IDRootTask は最初のタスクの ID であるため、グループのすべてのタスクを取得します。2 番目の FK である IDRootParent を使用して、親タスクのタスクのみを取得できます。このように、親と親の親を取得するための再帰関数は必要ありません。

その他のオプションとして、決定的なタスクを実行するすべてのタスクが必要な場合は、すべての子孫またはすべての先祖を知ることができるツリーをデータベースに保存する必要があります。

于 2013-04-21T11:25:28.587 に答える