精进不休 .NET 4.5 (11) - ADO.NET Entity Framework 5.0 新特性, WCF Data Services 5.0 新特性(OData V3)

[索引页]
[源码下载] 


精进不休 .NET 4.5 (11) - ADO.NET Entity Framework 5.0 新特性, WCF Data Services 5.0 新特性(OData V3)



作者:webabcd


介绍
精进不休 .NET 4.5

  • ADO.NET Entity Framework 5.0 新特性
  • WCF Data Services 5.0 新特性(OData V3)



示例
一、ADO.NET Entity Framework 5.0 新特性
1、演示 ef5 对枚举类型的支持
EnumSupport.aspx.cs

/*
 * 演示 EF5.0 对枚举的支持
 * 
 * 注:相关枚举设计请打开模型设计器查看,自动生成的枚举类型的代码在 NorthwindModel.edmx/NorthwindModel.tt/ReorderLevel.cs
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EF50
{
    public partial class EnumSupport : System.Web.UI.Page
    {
        // 通过模型设计器设计了如下枚举
        /*
        public enum ReorderLevel : short
        {
            level1 = 0,
            level2 = 5,
            level3 = 10,
            level4 = 15,
            level5 = 20,
            level6 = 25,
            level7 = 30
        }
        */
        // 注:各种相关信息可以打开模型设计器后,在模型浏览器视图中查看

        protected void Page_Load(object sender, EventArgs e)
        {
            using (var db = new NorthwindEntities())
            {
                var p = db.Products.First();
                lblMsg.Text = p.ReorderLevel.ToString();
            }
        }
    }
}


2、演示如何通过存储过程返回多个结果
GetCategoriesAndProducts.sql

/*
 * 用于演示如何通过存储过程返回多个结果
 */
CREATE PROCEDURE [dbo].[GetCategoriesAndProducts]
AS
    SELECT * FROM dbo.Categories
    SELECT * FROM dbo.Products

StoredProcedureWithMultipleResults.aspx.cs

/*
 * 演示如何通过存储过程返回多个结果
 */

using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Data.Objects;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EF50
{
    public partial class StoredProcedureWithMultipleResults : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            using (var db = new NorthwindEntities())
            {
                // 指定存储过程
                var cmd = db.Database.Connection.CreateCommand();
                cmd.CommandText = "[dbo].[GetCategoriesAndProducts]";

                try
                {
                    // 运行存储过程
                    db.Database.Connection.Open();
                    var reader = cmd.ExecuteReader();

                    // 获取存储过程返回数据中的第一个结果
                    var categories = ((IObjectContextAdapter)db)
                        .ObjectContext
                        .Translate<Category>(reader, "Categories", MergeOption.AppendOnly);

                    lblMsg.Text = "Category Count: " + categories.ToList().Count.ToString();
                    lblMsg.Text += "<br />";

                    // 获取存储过程返回数据中的第二个结果
                    reader.NextResult();
                    var products = ((IObjectContextAdapter)db)
                        .ObjectContext
                        .Translate<Product>(reader, "Products", MergeOption.AppendOnly);

                    lblMsg.Text += "Product Count: " + products.ToList().Count.ToString();
                }
                finally
                {
                    db.Database.Connection.Close();
                }
            }
        }
    }
}


3、其他
Index.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="EF50.Index" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <div>
        <h2>精进不休 .NET 4.5 - ADO.NET Entity Framework 5.0 新特性</h2>

        <p>
            1、<a href="EnumSupport.aspx" target="_blank">对枚举类型的支持</a>
        </p>
        <p>
            2、<a href="StoredProcedureWithMultipleResults.aspx" target="_blank">支持通过存储过程返回多个结果</a>
        </p>
        <p>
            3、性能提高
        </p>
        <p>
            4、新增了空间相关的数据类型 System.Data.Spatial.DbGeography 和 System.Data.Spatial.DbGeometry
        </p>
        <p>
            5、可以修改实体数据模型中的关系图的实体的颜色
        </p>
        <p>
            6、实体数据模型设计器多了一些功能,通过右键属性看看吧
        </p>
    </div>
</body>
</html>



二、WCF Data Services 5.0 新特性(OData V3)
服务端
WcfDataService.svc.cs

/*
 * 提供 OData V3 服务的服务端
 */

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 ODataV3
{
    public class WcfDataService : DataService<NorthwindEntities>
    {
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.All);
            config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }
    }
}

客户端
Client.aspx.cs

/*
 * 调用 OData V3 服务的客户端
 * 
 * 注:关于 WCF Data Services 5.0 的新特性的详细信息请参见 http://msdn.microsoft.com/en-us/library/hh487257(v=vs.103).aspx
 */

using ODataV3Client.MyServiceProxy;
using System;
using System.Collections.Generic;
using System.Data.Services.Client;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ODataV3Client
{
    public partial class Client : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Uri uri = new Uri("http://localhost:29702/WcfDataService.svc/");
            NorthwindEntities ctx = new NorthwindEntities(uri);

            /*
             * 以 URI 语法的方式查询 ADO.NET 数据服务,详细语法参看 MSDN
             * http://[Url]/[ServiceName]/[EntityName]/[NavigationOptions]?[QueryOptions]
             */


            DataServiceQuery<Product> p1 =
                ctx.CreateQuery<Product>("/Products")
                .AddQueryOption("$filter", "ProductID eq 10");
            // http://localhost:29702/WcfDataService.svc/Products()?$filter=ProductID eq 10


            DataServiceQuery<Product> p2 =
               ctx.CreateQuery<Product>("/Products")
               .AddQueryOption("$filter", "ProductID ge 10")
               .AddQueryOption("$top", "3")
               .AddQueryOption("$orderby", "ProductID asc")
               .AddQueryOption("$select", "ProductID, ProductName")
               .Expand("Category"); // 是否需要包括相关的 Category 信息
            // http://localhost:29702/WcfDataService.svc/Products()?$expand=Category&$filter=ProductID ge 10&$top=3&$orderby=ProductID asc&$select=ProductID, ProductName


            DataServiceQuery<Product> p3 =
              ctx.CreateQuery<Product>("/Products")
              .AddQueryOption("$filter", "startswith(ProductName, 'a')");
            // http://localhost:29702/WcfDataService.svc/Products()?$filter=startswith(ProductName, 'a')



            /* 
             * 详细的 URI 语法请参看:
             * http://msdn.microsoft.com/zh-cn/library/cc668784.aspx
             * http://msdn.microsoft.com/zh-cn/library/cc668787.aspx
             * http://msdn.microsoft.com/zh-cn/library/cc668793.aspx
             */
        }
    }
}



OK 
[源码下载]

posted @ 2012-10-15 09:01  webabcd  阅读(8249)  评论(4编辑  收藏  举报