次のようなノード構造を持つバイナリ ツリーがあるとします。
public class Node
{
public int NodeId { get; set; }
public virtual Node ParentNode {get; set; }
public virtual Node LeftChildNode {get; set; }
public virtual Node RightChildNode {get; set; }
}
Code First を使用すると、データベースのノード テーブルに次の列が表示されます。
ParentNode_NodeId、
LeftChildNode_NodeId、
RightChildNode_NodeId
テーブルに ParentNode_NodeId 列がなく、コードで ParentNode (someNode.ParentNode としましょう) を要求すると、次のように解釈されるという関係を手動で設定することは可能ですか?
Select * from Node Where LeftChildNode_NodeId = someNode.NodeId or RightChildNode_NodeId = someNode.NodeId;
?
データベースに保存されているノードの下で複数のノードを相互に追加しようとするとエラーが発生するため、必要です。例えば:
Node parentNode = dbContext.Node.Find(1);
parentNode.LeftChildNode = new Node();
parentNode.LeftChildNode.LeftChildNode = new Node();
dbContext.SaveChanges(); <---- here is problem because parentNode.LeftChildNode has no id
理解不能なコードを作らずにそのようなアクションを作ることは可能ですか?