Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

Register a Custom Schema Provider for a Synonym Database

  • 4 minutes to read

This document describes how to implement a custom data source schema provider that enables end-users to bind reports to a synonym database.

Tip

A synonym is a database object that provides an alternative name for another database object.

Refer to the Oracle and Microsoft SQL Server documentation to learn how different database engines support synonyms.

#Implement a Custom Schema Provider

The following code shows how to create a custom database schema provider inherited from the DBSchemaProviderEx class that is the IDBSchemaProviderEx interface’s default implementation.

using DevExpress.DataAccess.Sql;
using DevExpress.Xpo.DB;
using System.Collections.Generic;
using System.Linq;
// ...

public class SynonymDBSchemaProvider : DevExpress.DataAccess.Sql.DBSchemaProviderEx {
    public override DBTable[] GetTables(SqlDataConnection connection, params string[] tableList) {
        List<DBTable> tables = base.GetTables(connection, tableList).ToList();
        if(connection.Name == "OracleConnection")
            tables.Add(new DBTable("Regions") {
                Columns = {
                    new DBColumn { Name = "REGION_ID", ColumnType = DBColumnType.Int32 },
                    new DBColumn { Name = "REGION_NAME", ColumnType = DBColumnType.String, Size = 25 },
                }
            });

        return tables.ToArray();
    }
}

#Register the Schema Provider in a WinForms Reporting Application

The following code registers a custom database schema provider in a WinForms End-User Report Designer by calling the XRDesignMdiController.AddService method.

using DevExpress.DataAccess.Sql;
using DevExpress.XtraReports.UserDesigner;
// ...

public partial class Form1 : XRDesignRibbonForm {
    public Form1() {
        InitializeComponent();
        DesignMdiController.AddService(typeof(IDBSchemaProviderEx), new SynonymDBSchemaProvider());
    }
}

#Register the Schema Provider in a WPF Reporting Application

The following code registers a custom database schema provider in a WPF End-User Report Designer.

<Window x:Class="CustomDBSchemaProviderEx.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CustomDBSchemaProviderEx"
        xmlns:dxrud="http://schemas.devexpress.com/winfx/2008/xaml/reports/userdesigner" 
        xmlns:dxda="http://schemas.devexpress.com/winfx/2008/xaml/dataaccess" 
        xmlns:dasql="clr-namespace:DevExpress.DataAccess.Sql;assembly=DevExpress.DataAccess.v18.1" 
        Title="MainWindow" >

    <dxrud:ReportDesigner HorizontalAlignment="Left" VerticalAlignment="Top">
        <dxrud:ReportDesigner.ServicesRegistry>
            <dxda:InstanceEntry ServiceType="{x:Type dasql:IDBSchemaProviderEx}" >
                <dxda:InstanceEntry.Instance>
                    <local:SynonymDBSchemaProvider />
                </dxda:InstanceEntry.Instance>
            </dxda:InstanceEntry>
        </dxrud:ReportDesigner.ServicesRegistry>
    </dxrud:ReportDesigner>

</Window>

#Register the Schema Provider in an ASP.NET Reporting Application

Create a custom database schema provider factory by implementing the IDataSourceWizardDBSchemaProviderExFactory interface as shown below. Use the IDataSourceWizardDBSchemaProviderExFactory.Create method to initialize a new custom data store schema provider (SynonymDBSchemaProvider).

using DevExpress.DataAccess.Sql;
using DevExpress.DataAccess.Web;
// ...

public class MyDataSourceWizardDBSchemaProviderFactory : IDataSourceWizardDBSchemaProviderExFactory {
    public IDBSchemaProviderEx Create() {
        return new SynonymDBSchemaProvider();
    }
}

#ASP.NET Application

Register the custom database schema provider factory by calling the static DefaultReportDesignerContainer.RegisterDataSourceWizardDBSchemaProviderExFactory<T> method, as shown below.

using DevExpress.DataAccess.Web;
using System;
// Add a reference to the DevExpress.XtraReports.Web assembly
using DevExpress.XtraReports.Web.ReportDesigner
// ...

public class Global_asax : System.Web.HttpApplication {
    void Application_Start(object sender, EventArgs e) {
        // ...
        // Register the custom provider factory.
        DefaultReportDesignerContainer.RegisterDataSourceWizardDBSchemaProviderExFactory<MyDataSourceWizardDBSchemaProviderFactory>();
    }
    // ...
}

#ASP.NET Core Application

Register the custom database schema provider factory by calling the RegisterDataSourceWizardDBSchemaProviderExFactory<T>() method, as shown below.

using DevExpress.AspNetCore;
using DevExpress.AspNetCore.Reporting;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDevExpressControls();
builder.Services.ConfigureReportingServices(configurator => {
    configurator.ConfigureQueryBuilder(queryBuilderConfigurator => {
        // Register the custom provider factory.
        queryBuilderConfigurator.RegisterDataSourceWizardDBSchemaProviderExFactory<MyDataSourceWizardDBSchemaProviderFactory>();
    });
});

var app = builder.Build();