我将在我的下一个项目中使用Code First。我非常喜欢这个想法,到目前为止它也运行得很好。我唯一不满意的是,我找不到如何操纵这个工具的任何文档,而且谷歌搜索通常会引用过时的CTPs。
对于这个问题,我将建立一个有向图模型。图遍历算法并不打算达到最优。
我有一个简单的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; }
}
简单而整洁。
但是现在假设我想要为每个节点添加对图形对象的某种引用,以便节点可以在图形的上下文中了解自身的情况,例如它有多少条边。
我希望我的节点在创建时拥有:
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类中。我不想这么做的原因是我想绑定到那个属性,而绑定是有害的。
你们其中一个巫师能引导我找到必要的注释/EntityTypeConfiguration魔法的正确组合来解决这个问题吗?
有没有其他的惯例需要我注意?例如,如果我能够将所有的边或者更好的一些边(从节点出发的那些)绑定到节点上,那就更加优美了。
提前感谢,如果您对任何Code First爱好者应该阅读...首先,请分享您的链接!