ef6의 실체 모델 edmx 파일에 필드 설명을 추가합니다

9528 단어 C#/.NET/VS/Linq
code smith 템플릿(code smith 소프트웨어를 다운로드하여 사용하려면):
//주석 섹션 코드 생성












=0;i--)
{
    if(TableName[i]>='A'&& TableName[i]<='Z')
    {
        TableName=TableName.Substring(0,i)+TableName.Substring(i,1).ToLower()+TableName.Substring(i+1);
        break;
    }
}
*/
string primaryname=Table.PrimaryKey.MemberColumns[0].Name;
string primarytype= CSharpAlias[Table.PrimaryKey.MemberColumns[0].SystemType.FullName];
string autoname="",autotype="";
 foreach(ColumnSchema cs in Table.Columns) 
 {  
     if( ((bool)cs.ExtendedProperties["CS_IsIdentity"].Value) == true)
     {
        autoname=cs.Name;
        autotype=CSharpAlias[cs.SystemType.FullName];
         break;
     }
 }
List fkeys=new List();//             
foreach(var item in Table.ForeignKeys)
{
    fkeys.Add(item.ForeignKeyMemberColumns[0].Name);
    //Response.Write(item.ForeignKeyMemberColumns[0].Name+"--"+item.PrimaryKey.Table.Name+"
"); } TableSchemaCollection tables=new TableSchemaCollection();; if(IsAll !=true) { tables.Add(Table); } else { tables=this.SourceDatabase.Tables; } %>
0) precision=" Precision=\""+col.Scale+"\""; //col.Precision %> >


//生成文件到硬上















    //        
     private string Directory = String.Empty;
    [Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))]   
    [Optional, NotChecked]
    [DefaultValue("")]
    public string OutputDirectory 
    { 
        get
        {
            return Directory;
        }
        set
        {
            if (value.EndsWith("\\")) value = value.Substring(0, value.Length -1);
            Directory = value;
        } 
    }
    public string GetSubspace(string tableName)
    {
        
        for(int i=tableName.Length-1;i>=0;i--)
        {
            if(tableName[i]>='A'&& tableName[i]<='Z')
            {
                tableName=tableName.Substring(0,i)+tableName.Substring(i,1).ToLower()+tableName.Substring(i+1);
                break;
            }
        }
        return tableName;
    }
        //    Entity 
    private void GenerateEntityClasses()
    {
        CodeTemplate edmx_sumaryTemplate =new edmx_sumary();

        /*
        ////    BaseDAL   
        string basedalDirectory = OutputDirectory +"\\DAL\\BaseDAL.cs";
        basedalTemplate.SetProperty("NM",MyNameSpace);//    
        basedalTemplate.RenderToFile(basedalDirectory,true);//    
        Debug.WriteLine(basedalDirectory +"     .");
        */
        

            Response.WriteLine("……………………    ……………………");
            string edmx_sumaryDirectory = OutputDirectory +"\\edmx_sumary.xml";

            
            //  Service  
            edmx_sumaryTemplate.SetProperty("SourceDatabase",SourceDatabase);
            edmx_sumaryTemplate.SetProperty("Table",Table);
            edmx_sumaryTemplate.SetProperty("IsAll",IsAll);
            edmx_sumaryTemplate.RenderToFile(edmx_sumaryDirectory,true);//    
            Response.WriteLine(edmx_sumaryDirectory +"     .");

            
            Response.WriteLine("……………………     ……………………");
    }



c# 새 콘솔 응용 프로그램으로 eDMx의 필드에 주석을 달습니다.
    class Program
    {
        static void Main(string[] args)
        {
            Work wk = new Work();
            wk.DoWork();
            Console.ReadKey();
        }
    }
    public class Work
    {
//        exe      

        public string InXmlPath = "edmx_sumary.xml";//code smith       
        public string OutXmlPath = "SysEntities.edmx";
        public void DoWork()
        {
            string InFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, InXmlPath);
            string OutFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, OutXmlPath);
            XmlDocument inputDoc = new XmlDocument();
            XmlDocument outputDoc = new XmlDocument();
            inputDoc.Load(InFile);
            outputDoc.Load(OutFile);
            XmlNodeList inList = inputDoc.SelectNodes("/Schema/EntityType");
            if (inList == null || inList.Count == 0) return;
            XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(outputDoc.NameTable);
            xmlnsManager.AddNamespace("edmx", "http://schemas.microsoft.com/ado/2009/11/edmx");
            xmlnsManager.AddNamespace("annotation", "http://schemas.microsoft.com/ado/2009/02/edm/annotation");
            xmlnsManager.AddNamespace("customannotation", "http://schemas.microsoft.com/ado/2009/02/edm/customannotation");
            //  "/edmx:Edmx/edmx:Runtime/edmx:ConceptualModels/edmx:Schema/edmx:EntityType"

            XmlNode outSchemaNode = outputDoc.SelectSingleNode("/edmx:Edmx/edmx:Runtime/edmx:ConceptualModels", xmlnsManager).ChildNodes[0];
            foreach (XmlNode inNode in inList)//       
            {
                if (inNode.NodeType == XmlNodeType.Comment) continue;
                XmlElement inElement = (XmlElement)inNode;
                string tableName = inElement.GetAttribute("Name");
                Console.Write(tableName + "  ;  ");
                Console.WriteLine();
                XmlElement outElement = null;
                foreach (XmlNode outNodetemp in outSchemaNode.ChildNodes)//                     
                {
                    if (outNodetemp.NodeType == XmlNodeType.Comment || outNodetemp.Name == "EntityContainer" || outNodetemp.Name == "Association") continue;
                    XmlElement xe_edmx = (XmlElement)outNodetemp;
                    string o_tableName = xe_edmx.GetAttribute("Name");
                    if (o_tableName == tableName)
                    {
                        outElement = xe_edmx; break;
                    }
                }
                if (outElement == null) continue;

                Console.WriteLine("edmx:" + outElement.GetAttribute("Name"));
                foreach (XmlNode field in outElement.ChildNodes)
                {
                    if (field.NodeType == XmlNodeType.Comment) continue;
                    XmlElement field_element = (XmlElement)field;
                    //if (field_element.NodeType == XmlNodeType.Comment || field_element.Name == "NavigationProperty" || field_element.Name == "Key") continue;
                    if (field_element.Name == "Documentation") outElement.RemoveChild(field);//            
                }
                //outputDoc.Save(OutFile + "new.edmx"); return;

                foreach (XmlNode field in inElement.ChildNodes)//         
                {
                    if (field.NodeType == XmlNodeType.Comment || field.Name=="Key") continue;
                    XmlElement field_element = (XmlElement)field;
                    string fieldName = field_element.GetAttribute("Name");
                    if (field_element.Name == "Documentation")
                    {
                        XmlElement temp = outputDoc.CreateElement("Documentation", "http://schemas.microsoft.com/ado/2013/11/edm/Property");
                        XmlElement tempc = outputDoc.CreateElement("Summary");
                        tempc.InnerText = field.InnerText;
                        temp.AppendChild(tempc);
                        Console.WriteLine("val:" + temp.Value);
                        outElement.AppendChild(temp);
                    }
                    else if (field_element.Name == "Property")
                    {
                        foreach (XmlNode outfield in outElement.ChildNodes)
                        {
                            if (outfield.NodeType == XmlNodeType.Comment) continue;
                            XmlElement outfield_element = (XmlElement)outfield;
                            if (outfield_element.GetAttribute("Name") == fieldName)
                            {
                                outfield.InnerXml = field.InnerXml;//                   
                                break;
                            }
                        }

                    }
                }
            }
            outputDoc.Save(OutFile + "new.edmx");//      ,         ,        。

        }

    }

tt모드에서도 코드를 써서 eDMx에서 주석을 읽어야 합니다. 현재 주석은 eDMx 파일에 있습니다. 수첩으로 열어 볼 수 있습니다.
tt가 eDMx의 주석을 읽는 것에 관해서는 인터넷 코드가 매우 많아서 모두 가능하다.

좋은 웹페이지 즐겨찾기