从DACPAC文件中读取元数据SQL数据库项目生成时会生成dacpac文件,可从中读出所需的元数据,进行一些转换(如生成数据字典)
var model = new TSqlModel(@"D:\kljob\CardLan\CardLanDB\bin\Debug\cardlandb.dacpac"); xmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = new UTF8Encoding(false); settings.NewLineChars = Environment.NewLine; MemoryStream ms = new MemoryStream(); XmlWriter writer=XmlWriter.Create(ms,settings); int startID=31;writer.WriteStartDocument();writer.WriteStartElement("root");foreach (var s innew ModelTypeClass[]{ModelSchema.PRocedure ,ModelSchema.View}){ var allTables = model.GetObjects(DacQueryScopes.UserDefined,s ); var tableScripts = from t in allTables select t ; foreach(var x in tableScripts){ writer.WriteStartElement("QueryObject"); writer.WriteElementString("ObjectID",startID++.ToString()); writer.WriteElementString("SourceType", x.ObjectType.Name); writer.WriteElementString("ObjectName", x.Name.Parts[1]); writer.WriteElementString("Remark",""); int id=0; foreach(var c in x.GetChildren()) { writer.WriteStartElement("QueryObjectCols"); writer.WriteElementString("Title",c.Name.Parts[2]); writer.WriteElementString("ObjColID",id++.ToString()); writer.WriteElementString("Field",c.Name.Parts[2]); writer.WriteElementString("Width","80"); writer.WriteElementString("Sortable","1"); if(s==ModelSchema.Procedure) writer.WriteElementString("ValueType",c.GetReferenced(Parameter.DataType).First().Name.Parts[0]); else writer.WriteElementString("ValueType",c.GetReferenced().First().GetReferenced(Column.DataType).First().Name.Parts[0]); writer.WriteElementString("ShoWorder","1"); writer.WriteEndElement(); } writer.WriteEndElement(); break; } } writer.WriteEndElement(); writer.WriteEndDocument();writer.Close();string xml = Encoding.UTF8.GetString(ms.ToArray()); Console.WriteLine(xml); //tableScripts.Dump();