如何首先创建EntityFramework代码的可视化模型

Cal*_*ton 56 c# entity-framework visual-studio asp.net-mvc-4 visual-studio-2012

如果你看这里你会注意到这个人正在显示实体模型图,我想知道如何从我的EntityFramework代码第一类创建一个实体模型图.

只是通过查看代码来记住所有内容如何链接在一起会让人感到沮丧.

Den*_*aub 57

随着实体框架电动工具安装在您的解决方案视图,您可以用鼠标右键单击背景下,点击"实体框架",然后选择"查看实体数据模型".

这将从您的类创建一个整洁的图表.

  • 不幸的是,VS2015不再支持此扩展.:( (2认同)
  • 您可以在GitHub(https://github.com/lastlink/EFPowerToolsExample)获取2010年至2015年视觉工作室的Entity Framework power tool 4 beta的更新版本.我还建议Dennis Traub考虑更新他的答案的链接.这可能会阻止我们定期挖掘.无论如何,Dennnis,非常感谢他们为这个伟大的工具做出了贡献. (2认同)

Sla*_*uma 49

实体数据模型图只是EDMX文件的可视化显示.要从Code-First模型获取此类图表,您必须从中创建EDMX文件:

using System.Data.Entity.Infrastructure; // namespace for the EdmxWriter class

using (var ctx = new MyContext())
{
    using (var writer = new XmlTextWriter(@"c:\Model.edmx", Encoding.Default))
    {
        EdmxWriter.WriteEdmx(ctx, writer);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码创建一个Model.edmx可以在Visual Studio中打开的文件.它将显示模型图.EDMX文件是当前Code-First模型的快照.在代码中更改模型时,必须创建一个新的EDMX文件以反映图中的这些更改.


小智 5

除了斯劳马他的回答。如果您希望能够调整图表的布局,并且不想每次创建后都再次重做,您可以将之前的 EDMX 文件中的 Diagram 节点复制到新的 EDMX 文件中:

        string sPath = @"c:\Development\{0}";
        try
        {
            File.Copy(String.Format(sPath, "Model.edmx"), String.Format(sPath, "ModelTemplate.edmx"));
            File.Delete(String.Format(sPath, "Model.edmx"));
        }
        catch (Exception)
        {

            //no worry, file not found issues
        }

        using (var ctx = new ShopID.Models.ShopIDDb())
        {
            using (var writer = new XmlTextWriter(String.Format(sPath, "Model.edmx"), Encoding.Default))
            {
                EdmxWriter.WriteEdmx(ctx, writer);
            }
        }

        XmlDocument oldModel = new XmlDocument();
        oldModel.Load(String.Format(sPath, "ModelTemplate.edmx"));
        XmlDocument newModel = new XmlDocument();
        newModel.Load(String.Format(sPath, "Model.edmx"));

        var nsmgr = new XmlNamespaceManager(newModel.NameTable);
        nsmgr.AddNamespace("diagram", "http://schemas.microsoft.com/ado/2009/11/edmx");
        XmlNode node = oldModel.SelectSingleNode("//diagram:Diagrams", nsmgr).ChildNodes[0];
        XmlNode newNode = newModel.SelectSingleNode("//diagram:Diagrams", nsmgr);
        XmlNode importNode = newNode.OwnerDocument.ImportNode(node, true);
        newModel.ImportNode(importNode, true);
        newNode.AppendChild(importNode);
        newModel.Save(String.Format(sPath, "Model.edmx"));
        File.Delete(String.Format(sPath, "ModelTemplate.edmx"));
Run Code Online (Sandbox Code Playgroud)

//更新的模型已准备好使用 Visual Studio 打开