Jak najpierw stworzyć wizualny model kodu EntityFramework
Jeśli spojrzysz tutaj zauważysz, że ten facet pokazuje diagramy modelu encji, chciałbym wiedzieć, jak mogę utworzyć Diagram modelu encji z moich pierwszych klas kodu EntityFramework.
Po prostu staje się frustrujące, próbując pamiętać, jak wszystko łączy się ze sobą, patrząc na kod.
4 answers
Po zainstalowaniu elektronarzędzi Entity Framework możesz kliknąć prawym przyciskiem myszy kontekst w widoku rozwiązania, kliknąć "Entity Framework", a następnie wybrać "View Entity Data Model".
To stworzy zgrabny diagram z Twoich klas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-06 19:42:53
Schemat modelu danych encji jest tylko wizualnym wyświetlaniem pliku EDMX. Aby uzyskać taki diagram z modelu Code-First należy utworzyć z niego plik 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);
}
}
Ten kod tworzy plik Model.edmx
, który można otworzyć w programie Visual Studio. Wyświetli diagram modelu. Plik EDMX jest migawką bieżącego modelu kodu. Po zmianie modelu w kodzie należy utworzyć nowy plik EDMX, aby odzwierciedlić te zmiany na diagramie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-06 19:36:30
Oprócz Slauma jego odpowiedź. Jeśli chcesz mieć możliwość dostosowania układu diagramu i nie chcesz go powtarzać za każdym razem po utworzeniu, możesz skopiować węzeł diagramu z poprzedniego pliku EDMX do nowego pliku 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"));
//zaktualizowany model jest gotowy do otwarcia w Visual Studio
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-15 17:52:04
Aby zachować układ z poprzedniego schematu generowanego przez Elektronarzędzia EF, przeniesie to pozycje jednostek i kolory itp. które istnieją w nowym i pozostawiają wszelkie dodatki tak jak jest. W przeciwnym razie nie zobaczysz nowych elementów na diagramie.
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);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-26 12:35:32