Подтвердить что ты не робот

Как вы сначала создаете визуальную модель кода EntityFramework?

Если вы посмотрите здесь, вы заметите, что этот парень показывает диаграммы модели Entity, я хотел бы знать, как я могу создать диаграмму модели Entity из моей EntityFramework кода первых классов.

Это просто разочаровывает, пытаясь вспомнить, как все соединяется, просто просматривая код.

4b9b3361

Ответ 1

С помощью Entity Frameworks Power Tools вы можете щелкнуть правой кнопкой мыши контекст в представлении вашего решения, нажать "Entity Framework", затем выбрать "Просмотр модели данных сущности".

Это создаст четкую диаграмму из ваших классов.

Ответ 2

Диаграмма модели данных сущностей - это просто визуальное отображение файла 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);
    }
}

Этот код создает файл Model.edmx, который можно открыть в Visual Studio. Он отобразит диаграмму модели. Файл EDMX представляет собой моментальный снимок вашей текущей модели Code-First. Когда вы меняете модель в коде, вы должны создать новый файл EDMX, чтобы отразить эти изменения на диаграмме.

Ответ 3

В дополнение к Слауме его ответ. Если вы хотите настроить макет диаграммы и не хотите повторять это каждый раз после создания, вы можете скопировать Диаграмму node из предыдущего файла EDMX в новый файл 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"));

//Обновленная модель готова к открытию с помощью Visual Studio

Ответ 4

Чтобы сохранить макет из предыдущей диаграммы, созданной на основе EF Power Tools, это будет переносить позиции и цвета объектов и т.д., которые существуют в новой, и оставлять любые дополнения как есть. В противном случае вы не увидите новые объекты на диаграмме.

    static void CopyLayout(string srcFile, string destFile)
    {
        var oldModel = XDocument.Load(srcFile);
        var newModel = XDocument.Load(destFile);

        XNamespace edmxNs = "http://schemas.microsoft.com/ado/2009/11/edmx";
        // find all entity shapes
        var oldEts = oldModel.Root.Descendants(edmxNs + "EntityTypeShape").Select(ets => ets).ToList();
        var newEts = newModel.Root.Descendants(edmxNs + "EntityTypeShape").Select(ets => ets).ToList();
        // replace any matching new with old
        foreach (var newEt in newEts)
        {
            var match = oldEts.SingleOrDefault(ot => ot.Attribute(@"EntityType").Value ==
                                                     newEt.Attribute(@"EntityType").Value);
            if (match != null)
                newEt.ReplaceAttributes(match.Attributes());
        }
        newModel.Save(destFile);
    }