Telerik OpenAccess ORM

Telerik OpenAccess ORM Send comments on this topic.
Using XmlMetadataSource
Programmer's Guide > Developer's Guide > OpenAccess ORM Domain Model > Advanced Domain Model Tasks > Working with Domain Model Metadata > How to: Get MetadataContainer > Using XmlMetadataSource

Glossary Item Box

The XmlMetadataSource class allows you to create (load) a MetadataContainer from a XML based source. This tutorial demonstrates you how to load a MetadataContainer from an existing RLINQ file by using the XmlMetadataSource the class.

The XmlMetadataSource class, exposes five static factory methods allowing you to create a new XmlMetadataSource instance from different objects. When you have an instance of the XmlMetadataSource class, you have to invoke the GetModel method to access the loaded metadata container.

  • FromStream - the FromStream static method allows you to create a new XmlMetadataSource instance from a given stream object.
    C# Copy Code
    string path = @"C:\EntityDiagrams.rlinq";

    Telerik.OpenAccess.Metadata.XmlMetadataSource xmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromStream(File.Open(path, FileMode.Open));
    Telerik.OpenAccess.Metadata.MetadataContainer model = xmlMetadataSource.GetModel();
    VB.NET Copy Code
    Dim path As String = "C:\EntityDiagrams.rlinq"

    Dim xmlMetadataSource As Telerik.OpenAccess.Metadata.XmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromStream(File.Open(path, FileMode.Open))
    Dim model As Telerik.OpenAccess.Metadata.MetadataContainer = xmlMetadataSource.GetModel()
  • FromReader - the FromReader static method allows you to create a new XmlMetadataSource instance from a XmlReader object.
    C# Copy Code
    string path = @"C:\EntityDiagrams.rlinq";
    XmlReader xmlReader = XmlReader.Create(path);

    Telerik.OpenAccess.Metadata.XmlMetadataSource xmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromReader(xmlReader);
    Telerik.OpenAccess.Metadata.MetadataContainer model = xmlMetadataSource.GetModel();
    VB.NET Copy Code
    Dim path As String = "C:\EntityDiagrams.rlinq"
    Dim xmlReader_Renamed As XmlReader = XmlReader.Create(path)

    Dim xmlMetadataSource As Telerik.OpenAccess.Metadata.XmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromReader(xmlReader_Renamed)
    Dim model As Telerik.OpenAccess.Metadata.MetadataContainer = xmlMetadataSource.GetModel()
  • FromUrl - creates a XmlMetadataSource instance with a given URL.
  • FromXml - creates a new XmlMetadataSource instance from a given XML as a string. The following example demonstrates you how to use the FromXml method. First, an instance of the assembly containing the RLINQ file is created. Next, all assembly resources are iterated and the target RLINQ file is extracted. A XmlDocument object is initialized with the RLINQ file. Finally, the outer XML is taken and passed to the FromXml method. Note that in this example the BuildAction of the RLINQ file should be set to Embedded Resource. EntityDiagrams is the name of the RLINQ file.
    C# Copy Code
    XmlDocument doc = new XmlDocument();
    Assembly assembly = Assembly.GetExecutingAssembly();
    Stream stream =
    null;
    string[] resources = assembly.GetManifestResourceNames();

    foreach (var item in resources)
    {
       
    if (item.EndsWith("EntityDiagrams.rlinq"))
       {
           stream = assembly.GetManifestResourceStream(item);
           
    break;
       }
    }

    if (stream != null)
    {
       doc.Load(stream);
       stream.Dispose();
    }

    if (doc != null)
    {
       Telerik.OpenAccess.Metadata.XmlMetadataSource xmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromXml(doc.OuterXml);
       Telerik.OpenAccess.Metadata.MetadataContainer model = xmlMetadataSource.GetModel();
    }
    VB.NET Copy Code
    Dim doc As New XmlDocument()
    Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
    Dim stream_Renamed As Stream = Nothing
    Dim resources() As String = assembly.GetManifestResourceNames()

    For Each item In resources
     If item.EndsWith("EntityDiagrams.rlinq") Then
      stream_Renamed = assembly.GetManifestResourceStream(item)
      Exit For
     End If
    Next item

    If stream_Renamed IsNot Nothing Then
     doc.Load(stream_Renamed)
     stream_Renamed.Dispose()
    End If

    If doc IsNot Nothing Then
     Dim xmlMetadataSource As Telerik.OpenAccess.Metadata.XmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromXml(doc.OuterXml)
     Dim model As Telerik.OpenAccess.Metadata.MetadataContainer = xmlMetadataSource.GetModel()
    End If
  • FromAssemblyResource - creates a new XmlMetadataSource instance from an assembly resource. Suppose you have the following project structure:



    And the BuildAction of the EntityDiagrams.rlinq is set to Embedded Resource. Then the FromAssemblyResource static method can be used in the following manner. 
    C# Copy Code
    Telerik.OpenAccess.Metadata.XmlMetadataSource xmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromAssemblyResource(
       Assembly.GetExecutingAssembly(), "EntityDiagrams.rlinq");
    Telerik.OpenAccess.Metadata.MetadataContainer model = xmlMetadataSource.GetModel();
    VB.NET Copy Code
    Dim xmlMetadataSource As Telerik.OpenAccess.Metadata.XmlMetadataSource = Telerik.OpenAccess.Metadata.XmlMetadataSource.FromAssemblyResource(System.Reflection.Assembly.GetExecutingAssembly(), "EntityDiagrams.rlinq")
    Dim model As Telerik.OpenAccess.Metadata.MetadataContainer = xmlMetadataSource.GetModel()