UFO ET IT

먼저 EntityFramework 코드의 시각적 모델을 만드는 방법

ufoet 2021. 1. 11. 21:11
반응형

먼저 EntityFramework 코드의 시각적 모델을 만드는 방법


여기 를 보면 이 사람이 엔터티 모델 다이어그램을 보여주고 있음을 알 수 있습니다. EntityFramework 코드 첫 번째 클래스에서 엔터티 모델 다이어그램을 만드는 방법을 알고 싶습니다.

코드를 보는 것만으로 모든 것이 어떻게 서로 연결되는지 기억하려고하면 답답해집니다.


으로 엔티티 프레임 워크 전동 공구는 당신이 당신의 솔루션 뷰에서 컨텍스트를 마우스 오른쪽 버튼으로 클릭 "엔티티 프레임 워크"를 클릭하면 설치 한 후 "보기 엔터티 데이터 모델"을 선택합니다.

그러면 클래스에서 깔끔한 다이어그램이 만들어집니다.


엔터티 데이터 모델 다이어그램은 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 파일을 만들어야합니다.


Slauma 외에도 그의 대답. 다이어그램의 레이아웃을 조정할 수 있고 생성 후 매번 다시 실행하지 않으려면 이전 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로 열 준비가되었습니다.


이전 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);
    }

ReferenceURL : https://stackoverflow.com/questions/18658078/how-do-you-create-a-visual-model-of-entityframework-code-first

반응형