如何扩展ADO.NET实体设计器?

时间:2009-03-25 21:04:47

标签: linq linq-to-entities ado.net-entity-data-model

是否知道如何扩展,即在Visual Studio中向实体设计器添加功能?

例如,我想右键单击设计器上实体的属性,并在上下文菜单上有一个新选项,允许我做任何我想要的东西。

1 个答案:

答案 0 :(得分:2)

VS 2008 SP1中的实体设计器没有很多可扩展性挂钩。您可以做的是利用Visual Studio可扩展性(VSIP,现在称为VSX):

  1. 加入your own context menu
  2. 使用IVsMonitorSelection to get the current selection,您可以从中获取ISelectionContainer。
  3. 如果用户选择了图表面,则可以将ISelectionContainer转换为DiagramDocView。这是“DSL”的一部分,它是Entity Designer用于其设计器表面的框架。
  4. 从这里你可以在DiagramDocView中做很多事情。 DiagramDocView.CurrentDiagram将为您提供Diagram对象。您可以调用Diagram.NestedChildShapes来获取图中的所有形状。要更改图表,您必须创建DSL事务并对事务中的形状执行编辑。这只是实体设计器上方的另一个层次,所有内容都将得到正确处理:

    using (Transaction tx = store.TransactionManager.BeginTransaction(txText))
    {
       // do something, such as creating an EntityTypeShape;
       tx.Commit();
    }
    
  5. VS 2010中的实体设计器将具有更多可扩展性挂钩,以允许您通过属性窗口或向导来影响模型。新的“模型优先”功能中的新扩展性工作基本上允许您以可组合的方式从Visual Studio中的模型生成任何内容。