Как вы сначала создаете визуальную модель кода EntityFramework?
Если вы посмотрите здесь, вы заметите, что этот парень показывает диаграммы модели Entity, я хотел бы знать, как я могу создать диаграмму модели Entity из моей EntityFramework кода первых классов.
Это просто разочаровывает, пытаясь вспомнить, как все соединяется, просто просматривая код.
Ответы
Ответ 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);
}