我爲我的下一個項目使用Code First。我非常喜歡這個想法,迄今爲止它的運作非常好。我唯一的牛肉是,我找不到任何關於如何使用這個野獸的文檔,而谷歌搜索通常指的是現在過時的CTP。從POCO對象引用DbContext
對於這個問題,我將模擬一個有向圖。 圖遍歷的算法不是最佳的。
我有一個簡單的POCO結構,這樣
class Graph : DbContext
{
public DbSet<Node> Nodes { get; set; }
public DbSet<Edge> Edges { get; set; }
public Graph(string connectionString) : base(connectionString) { }
}
class Edge
{
public int Id { get; set;}
public double Weight { get; set; }
public Node StartNode { get; set; }
public Node EndNode { get; set; }
}
class Node
{
public int Id { get; set; }
public string Label { get; set; }
}
簡潔明快的東西。
但是現在假設我想向每個節點添加對Graph對象的某種引用,以便節點可以在圖的上下文中找出有關它自身的信息,例如它有多少條邊。
我希望我的節點,創建時,有
class Node
{
public int Id { get; set; }
public string Label { get; set; }
//I want this property populated by magic.
//Just leaving it here crashes the program
public Graph Graph { get; set; }
//So that this property would do meaningful things.
public int EdgesFromThisNode
{
get { return Graph.Edges.Count(e => e.StartNode.Id == Id); }
}
}
我認爲我走出會議在這裏解決這個我有一個特別的問題。例如,該屬性可以作爲方法移動到Graph類。我不想這樣做的原因是因爲我想綁定到這個屬性,綁定是邪惡的。
你們其中的一個嚮導能夠指導我將註釋/實體類型配置魔術的正確組合拉到這個快速的一個嗎?
是否有我應該注意的不同約定?例如,如果我以某種方式可以綁定所有的邊或者更好,那麼一些邊(從節點發出的邊)到達Node,那就更加優雅了。
在此先感謝您,如果您有任何Code First發燒友應該閱讀的建議......首先,請分享您的鏈接!
謝謝你提供一個非常全面的答案,我將回顧我的實際問題以及這個解決方案如何適應它。你知道是否可以將Graph對象引用附加到每個節點?它味道不好嗎? – Gleno 2011-04-23 19:17:48
那個12段教程真的很棒的人! – Gleno 2011-04-23 19:36:45
@格萊諾:對我來說,它的味道不好,是的。 「POCO」的想法是在其中沒有持久性相關代碼或參考。我在我的答案中附加了Edit2部分,作爲您的綁定方案的替代解決方案,避免在模型類中具有上下文。我不知道這是否會滿足您的所有要求。 – Slauma 2011-04-23 20:09:12