This tutorial shows how to add the DashboardEFDataSource to data source storage and make it available to users. This tutorial used the MDF database.
In your application, add the NWind.mdf database to the App_Data folder from the C:\Users\Public\Documents\DevExpress Demos 20.1\Components\Data directory.
In Web.config, specify a connection string to the added database.
<configuration>
<connectionStrings>
<add name="NWindConnectionString" connectionString="data source=(localdb)\mssqllocaldb;attachdbfilename=|DataDirectory|\NWind.mdf;integrated security=True;connect timeout=120" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
- Right-click the project and select Add | ADO.NET Entity Data Model. Provide OrdersContext as a model name and select the Code First from database model type in the invoked wizard.
- Select the added NWindConnectionString as a data connection for the created model.
On the next page, specify which tables and view to include in your model. In this tutorial, the data model is based on the OrderDetail table. The code below shows the generated data model:
namespace WebFormsDashboardDataSources {
using System.Data.Entity;
public partial class OrdersContext: DbContext {
public OrdersContext()
: base("name=OrdersContext") {
}
public virtual DbSet<OrderDetail> OrderDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<OrderDetail>()
.Property(e => e.UnitPrice)
.HasPrecision(10, 4);
}
}
}
namespace WebFormsDashboardDataSources {
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public partial class OrderDetail
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int OrderID { get; set; }
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public short Quantity { get; set; }
[Column(Order = 2, TypeName = "smallmoney")]
public decimal UnitPrice { get; set; }
[Column(Order = 3)]
public float Discount { get; set; }
[Column(Order = 4)]
[StringLength(40)]
public string ProductName { get; set; }
[StringLength(217)]
public string Supplier { get; set; }
}
}
Imports System.Data.Entity
Namespace WebFormsDashboardDataSources
Partial Public Class OrdersContext
Inherits DbContext
Public Sub New()
MyBase.New("name=OrdersContext")
End Sub
Private privateOrderDetails As DbSet(Of OrderDetail)
Public Overridable Property OrderDetails() As DbSet(Of OrderDetail)
Get
Return privateOrderDetails
End Get
Set(ByVal value As DbSet(Of OrderDetail))
privateOrderDetails = value
End Set
End Property
Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder)
modelBuilder.Entity(Of OrderDetail)().Property(Function(e) e.UnitPrice).HasPrecision(10, 4)
End Sub
End Class
End Namespace
Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel.DataAnnotations.Schema
Namespace WebFormsDashboardDataSources
Partial Public Class OrderDetail
Private privateOrderID As Integer
<Key, Column(Order := 0), DatabaseGenerated(DatabaseGeneratedOption.None)> _
Public Property OrderID() As Integer
Get
Return privateOrderID
End Get
Set(ByVal value As Integer)
privateOrderID = value
End Set
End Property
Private privateQuantity As Short
<Column(Order := 1), DatabaseGenerated(DatabaseGeneratedOption.None)> _
Public Property Quantity() As Short
Get
Return privateQuantity
End Get
Set(ByVal value As Short)
privateQuantity = value
End Set
End Property
Private privateUnitPrice As Decimal
<Column(Order := 2, TypeName := "smallmoney")> _
Public Property UnitPrice() As Decimal
Get
Return privateUnitPrice
End Get
Set(ByVal value As Decimal)
privateUnitPrice = value
End Set
End Property
Private privateDiscount As Single
<Column(Order := 3)> _
Public Property Discount() As Single
Get
Return privateDiscount
End Get
Set(ByVal value As Single)
privateDiscount = value
End Set
End Property
Private privateProductName As String
<Column(Order := 4), StringLength(40)> _
Public Property ProductName() As String
Get
Return privateProductName
End Get
Set(ByVal value As String)
privateProductName = value
End Set
End Property
Private privateSupplier As String
<StringLength(217)> _
Public Property Supplier() As String
Get
Return privateSupplier
End Get
Set(ByVal value As String)
privateSupplier = value
End Set
End Property
End Class
End Namespace
In the Default.aspx.cs (or .vb) file, create a public method that returns the configured dashboard’s data source storage (DataSourceInMemoryStorage) and define the EF data source.
using System;
using DevExpress.DashboardCommon;
using DevExpress.DashboardWeb;
using DevExpress.DataAccess.EntityFramework;
public DataSourceInMemoryStorage CreateDataSourceStorage() {
DataSourceInMemoryStorage dataSourceStorage = new DataSourceInMemoryStorage();
DashboardEFDataSource efDataSource = new DashboardEFDataSource("EF Core Data Source");
efDataSource.ConnectionParameters = new EFConnectionParameters(typeof(OrdersContext));
dataSourceStorage.RegisterDataSource("efDataSource", efDataSource.SaveToXml());
return dataSourceStorage;
}
Imports System
Imports DevExpress.DashboardCommon
Imports DevExpress.DashboardWeb
Imports DevExpress.DataAccess.EntityFramework
Public Function CreateDataSourceStorage() As DataSourceInMemoryStorage
Dim dataSourceStorage As New DataSourceInMemoryStorage()
Dim efDataSource As New DashboardEFDataSource("EF Core Data Source")
efDataSource.ConnectionParameters = New EFConnectionParameters(GetType(OrdersContext))
dataSourceStorage.RegisterDataSource("efDataSource", efDataSource.SaveToXml())
Return dataSourceStorage
End Function
Call the ASPxDashboard.SetDataSourceStorage method to configure the data source storage. Use the created CreateDataSourceStorage method as the SetDataSourceStorage parameter.
using DevExpress.DashboardWeb;
protected void Page_Load(object sender, EventArgs e) {
// ...
// Configures the data source storage.
ASPxDashboard1.SetDataSourceStorage(CreateDataSourceStorage());
}
Imports DevExpress.DashboardWeb
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
' ...
' Configures the data source storage.
ASPxDashboard1.SetDataSourceStorage(CreateDataSourceStorage())
End Sub
The EF Data Source is now available in Web Dashboard:
Users can bind dashboard items to data in the Web Dashboard’s UI. See Bind Dashboard Items to Data in the Web Dashboard’s UI for more information.
Example
The example shows how to make a set of data sources available for users in the Web Dashboard application.