Reader Level:
ARTICLE

Select and Delete Data Using OData Service Via EDM Framework

Posted by Vijay Prativadi Articles | WCF with C# November 30, 2012
Today, in this article let's play around with one of the interesting and most useful concepts in OData.
  • 0
  • 0
  • 4921

Select Data using OData Service

Question: What is select data using OData service via EDM Framework?

In simple terms "It provides flexibility to pull out the data with help of data services via the EDM Framework".

Step 1: Create a new web application

web-application.png

Step 2: Set up a new EDM Framework for the project:

add-EDM- framework.png

choose-model-contents.png

choose-data-connection.png

choose-database-object.png

choose-database-object1.png

Step 3: Add a New WCF Data Service item to the project:

WCF-Data-Service.png

Step 4: The Complete code of ODataService.svc.cs looks like this:

using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
namespace
DeleteODataServiceApp
{
    public class DeleteDataService : DataService<CompanyEntities>
    {
       
// This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
           
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.// Examples:
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead | EntitySetRights.AllWrite);
            config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        }
    }
}


Step 5: Browse the of ODataService.svc.cs looks like this:

Browse-the-of-ODataService.png

Step 6: Create a new web application to existing application:

add-web-application-to-existing-application.png

Step 7: Add a service reference to the newly created web application:

Add-a-service-reference.png

Step 8:
The complete code of WebForm1.aspx looks like this:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="SelectDataWCFServiceApp.WebForm1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <style type="text/css">
        .grid
        {
            margin-top: 50px;
        }
    </style
>
    <title></title>
</head>
<
body>
    <form id="form1" runat="server">
    <center>
        <div>
            <table>
                <tr>
                    <td colspan="2" align="center">
                        <asp:Label ID="Label1" runat="server" Text="Select Data using OData Service via EDM Framework"
                            Font-Bold="true" Font-Size="Large" Font-Names="Verdana" ForeColor="Maroon"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" align="center">
                        <asp:Button ID="Button1" runat="server" Text="Select Data" Font-Names="Verdana" Width="213px"
                            BackColor="Orange" Font-Bold="True" OnClick="Button1_Click" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2" align="center">
                        <asp:GridView ID="GridView1" runat="server" CssClass="grid" BackColor="LightGoldenrodYellow"
                            BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None">
                            <AlternatingRowStyle BackColor="PaleGoldenrod" />
                            <FooterStyle BackColor="Tan" />
                            <HeaderStyle BackColor="Tan" Font-Bold="True" />
                            <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
                            <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
                            <SortedAscendingCellStyle BackColor="#FAFAE7" />
                            <SortedAscendingHeaderStyle BackColor="#DAC09E" />
                            <SortedDescendingCellStyle BackColor="#E1DB9C" />
                            <SortedDescendingHeaderStyle BackColor="#C2A47B" />
                        </asp:GridView>
                    </td>
                </tr>
            </table>
        </div>
    </center>
    </form>
</body>
</
html>

Step 9: The complete code of WebForm1.aspx.cs looks like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SelectDataWCFServiceApp.ServiceReference1;
namespace SelectDataWCFServiceApp
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            var query = from r in objEntities.Employee select new
            {FirstName = r.FirstName, LastName = r.LastName, Age = r.Age};
            GridView1.DataSource = query;GridView1.DataBind();
        }
        #region Instance MembersCompanyEntities objEntities = new CompanyEntities(new Uri("http://localhost:5577/ODataService.svc"));
        #endregion
    }
}


Step 10: The output of the application looks like this:

Select-Data-using-OData-Service1.png

Step 11: The selected data output of the application looks like this:

Select-Data-using-OData-Service2.png

Delete Data using OData Service

Question: What is delete data using OData service via EDM Framework?

Now, to delete data using an OData service via EDM Framework you just need to follow Step 1, Step 2 and Step 3 as above.

Step 4: In ODataService.svc.cs you need to provide write permissions also:

public class ODataService : DataService<CompanyEntities>
{
   
// This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)       
    {
       
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.// Examples:
        config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
}

Follow Step 5, Step 6 and Step 7 same as above.

Step 8: The complete code of WebForm1.aspx looks like this:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DeleteServiceApp.WebForm1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <style type
="text/css">
        .grid
        {
            margin-top: 50px;
        }
    </style
>
    <title></title>
</head>
<
body>
    <form id="form1" runat="server">
    <center>
        <div>
            <table
>
                <tr>
                    <td colspan="2" align="center">
                        <asp:Label ID="Label1" runat="server" Text="Delete with OData Service via EDM Framework"
                            Font-Bold="true" Font-Size="Large" Font-Names="Verdana" ForeColor="Maroon"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="Label2" runat="server" Text="Please Enter Employee Id" ForeColor="Brown"
                            Font-Bold="true" Font-Size="Medium" Font-Names="Verdana"></asp:Label>
                    </td>
                    <td>
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" align="center">
                        <asp:Button ID="Button1" runat="server" Text="Delete Data" Font-Names="Verdana" Width="213px"
                            BackColor="Orange" Font-Bold="True" OnClick="Button1_Click" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2" align="center">
                        <asp:GridView ID="GridView1" runat="server" CssClass="grid" BackColor="LightGoldenrodYellow"
                            BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None">
                            <AlternatingRowStyle BackColor="PaleGoldenrod" />
                            <FooterStyle BackColor="Tan" />
                            <HeaderStyle BackColor="Tan" Font-Bold="True" />
                            <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
                            <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
                            <SortedAscendingCellStyle BackColor="#FAFAE7" />
                            <SortedAscendingHeaderStyle BackColor="#DAC09E" />
                            <SortedDescendingCellStyle BackColor="#E1DB9C" />
                            <SortedDescendingHeaderStyle BackColor="#C2A47B" />
                        </asp:GridView>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" align="center">
                        <asp:Label ID="Label3" runat="server" Font-Bold="true" Font-Size="Medium" Font-Names="Verdana"></asp:Label>
                    </td>
                </tr>
            </table>
        </div>
    </center>
    </form>
</body>
</
html>

Step 9: The complete code of WebForm1.aspx.cs looks like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DeleteServiceApp.ServiceReference1;
namespace
DeleteServiceApp
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            TextBox1.Focus();
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(TextBox1.Text))
            {
                Label3.Text = "Please Enter Id Value";
                Label3.ForeColor = System.Drawing.Color.Red;
            }
           
else
            {
                var deleteQuery = (from r in objEntities.Employeewhere r.EmpId ==int.Parse(TextBox1.Text)select r).Single();
                objEntities.DeleteObject(deleteQuery);
                objEntities.SaveChanges();
                var query = from r in objEntities.Employee select new
                { Id = r.EmpId, FirstName = r.FirstName, LastName = r.LastName, Age = r.Age };
                GridView1.DataSource = query;
                GridView1.DataBind();
                Label3.Text = "Record Deleted Successfully";
                Label3.ForeColor = System.Drawing.Color.Green;
                TextBox1.Text = string.Empty;
            }
        }
        #region Instance MembersCompanyEntities objEntities = new CompanyEntities(new Uri("http://localhost:10541/DeleteDataService.svc/"));
        #endregion
    }
}

Step 10: The output of the application looks like this:

OutPutResult.png

Step 11: The deleted data output of the application looks like this:

OutPutResult1.png

I hope this article is useful for you. I look forward for your comments and feedback.Thanks Vijay Prativadi

COMMENT USING

Trending up