精进不休 .NET 4.0 (6) - ADO.NET Data Services 1.5 新特性

.NET 4.0 精进不休:约定优于配置与 dynamic 的技术基因溯源 约定优于配置(Convention over Configuration)和 dynamic 是现代 .NET 开发的两大基石概念,前者推动框架从显式声明转向智能推断,后者赋予 C# 运行时动态互操作能力。其原理根植于 .NET 4.0 时代对开发效率与抽象层级的深度重构:通过内置默认约定减少样板代码,借助 DLR 实现跨语言与松耦合集成。这一设计哲学持续影响 EF Core 的 Fluent API、ASP.NET Core 的中间件管道及 JSON 序列化生态。在微服务、低代码和领域驱动开发等场景中,理 阅读详情
[源码下载]


精进不休 .NET 4.0 (6) - ADO.NET Data Services 1.5 新特性


作者: webabcd


介绍
ADO.NET Data Services 1.5 的新增功能
  • 支持服务端的 RowCount - 获取指定实体集合的成员数(只返回一个整型值,而不会返回实体集合) 
  • 支持服务端的分页 - 服务端可以返回分页后的数据,并且在其中还可以包含全部数据总数 
  • 支持服务端的 Select - 返回的结果只包括 Select 的字段 
  • 支持大数据传输 BLOB(binary large object)
  • 支持自定义数据服务 


示例
1、服务端 RowCount 的 Demo
MyDataService.svc.cs
代码
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  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  MyDataService : DataService < MyEntity.AdventureWorksEntities >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);

            
//  SetEntitySetPageSize(string name, int size) - 新增的方法。用于提供分页后的数据
            
//      string name - 指定需要用于分页的实体集合
            
//      int size - 分页的页大小
            config.SetEntitySetPageSize( " Products " ,  5 );
        }
    }
}

RowCount.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  RowCount : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            MyDataServiceProxy.AdventureWorksEntities context 
=   new  MyDataServiceProxy.AdventureWorksEntities( new  Uri( " http://localhost:9046/DataServices/Service/MyDataService.svc/ " ));

            
//  支持服务端的 RowCount - 获取指定实体集合的成员数(只返回一个整型值,而不会返回实体集合)
            var productCount  =  context.Products.Count();
            Response.Write(productCount.ToString());
        }
    }
}

/*
$count - 返回 RowCount,即对应集合的成员数(只返回一个整型值,而不会返回实体集合)
http://localhost :9046/DataServices/Service/MyDataService.svc/Products/$count

$inlinecount=none - 只返回实体集合(分页后的数据)
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=none

$inlinecount=allpages - 在返回实体集合的基础上(分页后的数据),其中还会包括一个实体集合成员数(分页前的数据)的字段
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=allpages
*/


2、服务端分页的 Demo
MyDataService.svc.cs
代码
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  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  MyDataService : DataService < MyEntity.AdventureWorksEntities >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);

            
//  SetEntitySetPageSize(string name, int size) - 新增的方法。用于提供分页后的数据
            
//      string name - 指定需要用于分页的实体集合
            
//      int size - 分页的页大小
            config.SetEntitySetPageSize( " Products " ,  5 );
        }
    }
}

Paging.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  Paging : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            MyDataServiceProxy.AdventureWorksEntities context 
=   new  MyDataServiceProxy.AdventureWorksEntities( new  Uri( " http://localhost:9046/DataServices/Service/MyDataService.svc/ " ));

            
//  支持服务端的分页 - 服务端可以返回分页后的数据,并且在其中还可以包含全部数据总数
            
//      服务端代码:config.SetEntitySetPageSize("Products", 5); 表示每页最多 5 条数据
            
//      客户端代码:通过 Skip() 方法来控制需要跳过的记录数
            var products  =  context.Products.Skip( 10 );

            
foreach  (var product  in  products)
            {
                Response.Write(product.ProductID.ToString() 
+   " <br /> " );
            }
        }
    }
}

/*
$skip=[int] - 指定需要跳过的记录数
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$skip=10

$inlinecount=none - 只返回实体集合(分页后的数据)
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=none

$inlinecount=allpages - 在返回实体集合的基础上(分页后的数据),其中还会包括一个实体集合成员数(分页前的数据)的字段
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=allpages
*/


3、服务端 Select 的 Demo
MyDataService.svc.cs
代码
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  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  MyDataService : DataService < MyEntity.AdventureWorksEntities >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);

            
//  SetEntitySetPageSize(string name, int size) - 新增的方法。用于提供分页后的数据
            
//      string name - 指定需要用于分页的实体集合
            
//      int size - 分页的页大小
            config.SetEntitySetPageSize( " Products " ,  5 );
        }
    }
}

QueryProjection.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  QueryProjection : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            MyDataServiceProxy.AdventureWorksEntities context 
=   new  MyDataServiceProxy.AdventureWorksEntities( new  Uri( " http://localhost:9046/DataServices/Service/MyDataService.svc/ " ));

            
//  支持服务端的 Select - 返回的结果只包括 Select 的字段
            var products  =  context.Products.Select(p  =>   new  { ProductID  =  p.ProductID, Name  =  p.Name });

            
foreach  (var product  in  products)
            {
                Response.Write(product.ProductID.ToString() 
+   " :  "   +  product.Name  +   " <br /> " );
            }
        }
    }
}

/*
$select=[column1,column2,column3,...] - 返回的实体集合数据中只包括指定的字段
http://localhost :9046/DataServices/Service/MyDataService.svc/Products/?$select=ProductID,Name
*/


4、BLOB 的 Demo
BLOBService.svc.cs
代码
/*
ADO.NET Data Services 1.5 - 新增了对大数据传输 BLOB(binary large object)的支持
需要在概念模型(ConceptualModels)中的相关实体上增加属性“m:HasStream="true" xmlns:m="
http://schemas.microsoft.com/ado/2007/08/dataservices/metadata "”
*/

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;

using  System.IO;

namespace  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  BLOBService : DataService < MyEntity.AdventureWorksEntities > , IServiceProvider
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);
        }

        
public   object  GetService(Type serviceType)
        {
            
if  (serviceType  !=   typeof (System.Data.Services.Providers.IDataServiceStreamProvider))
                
return   null ;

            
//  调用服务的时候,如果指定了需要流式传输大数据对象,则通过我们自定义的流式文件传输对象去处理
             return   new  ProductPhotoStreamProvider();
        }
    }

    
///   <summary>
    
///  自定义的一个流式文件传输类,需要实现 System.Data.Services.Providers.IDataServiceStreamProvider 接口
    
///   </summary>
     public   class  ProductPhotoStreamProvider : System.Data.Services.Providers.IDataServiceStreamProvider
    {
        
///   <summary>
        
///  获取流。将某个实体的某个属性以流类型的方式返回
        
///   </summary>
        
///   <param name="entity"> 相关的实体 </param>
        
///   <param name="operationContext"> 当前数据服务请求的上下文 </param>
        
///   <returns></returns>
         public  Stream GetReadStream( object  entity,  string  etag,  bool ?  checkETagForEquality, DataServiceOperationContext operationContext)
        {
            
if  (entity  as  MyEntity.Product  ==   null )
                
return   null ;

            
int  productId  =  (entity  as  MyEntity.Product).ProductID;

            
using  (var context  =   new  MyEntity.AdventureWorksEntities())
            {
                var product 
=  context.Products.First(p  =>  p.ProductID  ==  productId);
                var stream 
=   new  MemoryStream(product.ThumbNailPhoto);
                
return  stream;
            }
        }

        
public  Uri GetReadStreamUri( object  entity, DataServiceOperationContext operationContext)
        {
            
return   null ;
        }

        
//  流的内容类型
         public   string  GetStreamContentType( object  entity, DataServiceOperationContext operationContext)
        {
            
return   " image/jpeg " ;
        }

        
public   string  GetStreamETag( object  entity, DataServiceOperationContext operationContext)
        {
            
return   null ;
        }

        
//  流的缓冲区大小
         public   int  StreamBufferSize
        {
            
get  {  return   64 ; }
        }

        
public   void  DeleteStream( object  entity, DataServiceOperationContext operationContext)
        {
            
throw   new  NotImplementedException();
        }

        
public  System.IO.Stream GetWriteStream( object  entity,  string  etag,  bool ?  checkETagForEquality, DataServiceOperationContext operationContext)
        {
            
throw   new  NotImplementedException();
        }

        
public   string  ResolveType( string  entitySetName, DataServiceOperationContext operationContext)
        {
            
throw   new  NotImplementedException();
        }
    }
}

BLOB.aspx
代码
<% @ Page Title = ""  Language = " C# "  MasterPageFile = " ~/Site.Master "  AutoEventWireup = " true "
    CodeBehind
= " BLOB.aspx.cs "  Inherits = " DataAccess.DataServices.BLOB "   %>

< asp:Content  ID ="Content1"  ContentPlaceHolderID ="head"  runat ="server" >
</ asp:Content >
< asp:Content  ID ="Content2"  ContentPlaceHolderID ="ContentPlaceHolder1"  runat ="server" >

    
<!--
        查看元数据 - http://localhost:9046/DataServices/Service/BLOBService.svc/$metadata
    
-->

    
<!--
        Products(714) - 在 Products 集合中取主键为 714 的实体
        $value - 取流数据
    
-->
    
< img  src ="http://localhost:9046/DataServices/Service/BLOBService.svc/Products(714)/$value"  alt ="image"   />

</ asp:Content >


5、自定义数据服务的 Demo
CustomDataService.svc.cs
代码
/*
ADO.NET Data Services 1.5 - 新增了对自定义数据服务的支持 
*/

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  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  CustomDataService : DataService < OrderContext >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Orders " , EntitySetRights.All);
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);
        }
    }

    
///   <summary>
    
///  数据上下文
    
///   </summary>
     public   class  OrderContext
    {
        
static  List < Order >  _orders;
        
static  List < Product >  _products;
        
static  OrderContext()
        {
            _orders 
=   new  List < Order >
            {
                
new  Order { OrderId  =   0 , Customer = " webabcd " },
                
new  Order { OrderId  =   1 , Customer = " webabcdefg " }
            };

            _products 
=   new  List < Product >
            {
                
new  Product { ProductId  =   0 , ProductName = " wii " , Price = 100  }, 
                
new  Product { ProductId  =   1 , ProductName = " xbox360 " , Price = 200  }, 
                
new  Product { ProductId  =   2 , ProductName = " ps3 " , Price  =   300  }, 
                
new  Product { ProductId  =   3 , ProductName = " nds " , Price = 50  },
                
new  Product { ProductId  =   4 , ProductName = " psp " , Price = 100  }
            };

            _orders[
0 ].Items.Add(_products[ 0 ]);
            _orders[
0 ].Items.Add(_products[ 1 ]);

            _orders[
1 ].Items.Add(_products[ 2 ]);
            _orders[
1 ].Items.Add(_products[ 3 ]);
            _orders[
1 ].Items.Add(_products[ 4 ]);
        }


        
public  IQueryable < Order >  Orders
        {
            
get  {  return  _orders.AsQueryable < Order > (); }
        }

        
public  IQueryable < Product >  Products
        {
            
get  {  return  _products.AsQueryable < Product > (); }
        }
    }

    
/*
     * DataServiceKeyAttribute() - 指定主键字段
     * EntityPropertyMapping() - 实体属性到 ATOM 字段的映射,以便生成一个友好格式的 Feed 
     
*/
    [EntityPropertyMapping(
" Customer " , SyndicationItemProperty.AuthorName, SyndicationTextContentKind.Plaintext,  true )]
    [DataServiceKeyAttribute(
" OrderId " )]
    
public   class  Order
    {
        
public   int  OrderId {  get ;  set ; }
        
public   string  Customer {  get ;  set ; }

        
private  List < Product >  _items;
        
public  List < Product >  Items
        {
            
get
            {
                
if  (_items  ==   null )
                    _items 
=   new  List < Product > ();

                
return  _items;
            }
            
set
            {
                _items 
=  value;
            }
        }
    }

    [DataServiceKeyAttribute(
" ProductId " )]
    
public   class  Product
    {
        
public   int  ProductId {  get ;  set ; }
        
public   string  ProductName {  get ;  set ; }
        
public   int  Price {  get ;  set ; }
    }
}

CustomDataService.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  CustomDataService : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            
//  使用自定义数据服务提供的服务
            CustomDataServiceProxy.OrderContext context  =   new  CustomDataServiceProxy.OrderContext( new  Uri( " http://localhost:9046/DataServices/Service/CustomDataService.svc/ " ));

            var orders 
=  context.Orders;

            
foreach  (var order  in  orders)
            {
                Response.Write(order.OrderId.ToString() 
+   " <br /> " );
            }
        }
    }
}


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


OK
[源码下载]
26、ADO.NET Data Services与Azure表服务操作详解 本文详解了ADO.NET Data Services与Azure表服务的操作,包括LINQ查询支持、表的创建、实体操作、数据查询以及分区策略的优化实践。还介绍了如何通过额外表模拟二级索引功能,同时提供了开发中的关键注意事项及未来展望。 阅读详情

相关推荐

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7273

基于Mybatis及Mybatis-Plus的多数据源解决方案

本文主要介绍了基于Mybatis分包、基于Mybati-Plus Dynamic-Datasource实现多数据源的方案(文中附有源码链接),并探讨了多数据源本地事务、分布式事务的解决方案。

罗小爬的技术宝书 6635

python解析通达信dat与blk数据文件【附源码】

本文介绍了一个完整的通达信金融数据解析器项目,该项目攻克了通达信专有二进制文件格式解析的技术难题。项目采用模块化架构,从基础二进制解析到增强数据分类,最终实现智能语义化列名生成,形成完整的数据处理链路。核心技术包括自适应编码检测、智能数据类型推断和基于业务规则的语义化处理,解决了逆向工程、多编码兼容性等挑战。项目成果显著,解析成功率达100%,数据可读性大幅提升,开发效率提高50%,为量化交易、可视化分析等场景提供了可靠数据支持。该方案不仅具备技术创新性,更具有实际工程应用价值,为金融数据分析领域提供了可复

qq_36224726的博客 2688

Data Service-创建一个时间维度表

Data Service-创建一个时间维度表  写在前面:     本篇文章介绍利用SAP Data Service 创建一个时间维度表的过程.  准备工作:     SAP Data Service(本人使用的是4.2版本)  具体步骤:  步骤一:     建立一个项目及Batch Job  步骤二:     双击步骤一中建立的Batch Job,在右侧界面中新建一个Data F

虎小五进阶之路 2057

本地部署大模型 vs 网页版大模型区别

fill:#333;color:#333;color:#333;fill:none;本地服务器/工作站硬件资源私有化部署GPU集群高速存储模型文件训练框架推理引擎。

Ds-Rag的博 1711

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 464

ADO.Net Data Services Framework初識

微軟3.5 SP1推出了新的數據訪問FrameWork,叫ADO.Net Data Services Framework 概念: 微软在 .NET 3.5 SP1 平台上,推了一组新的数据访问 Framework,叫做 ADO.NET Data Services。微软怕程序员太闲吗?为什么要创造 ADO.NET Data Services?Web Service 和 WCF 不就...

a516831114的博客 245

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

(转)ADO.NET Data Service介绍

原贴:http://www.cnblogs.com/foundation/archive/2008/11/18/1335583.html#_Toc214762330 1.ADO.NET Data Service的DataServiceHost是一个WCF Service,由System.Data.Services.DataService<T>提供来自NET3.5 SP1 ...

anranbing3284的博客 179

如何使用 Claude Code 搜索 SAP note

当然,Claude Code 自己仍然要有一种合法可用的模型访问方式,例如 Claude 订阅、Anthropic API 或公司配置的模型提供方式,这和 Browser Extension 是两个问题。因为 Claude Code 已经是完整的 MCP Host,而 Microsoft Playwright MCP 又已经明确支持现有 Chrome Session,两者拼起来在技术架构上完全成立。Microsoft Playwright MCP 默认可以创建持久化浏览器 Profile。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 62

AgentScope 实战训练营-7 种多智能体协作模式详解

本教程基于阿里巴巴开源的AgentScope Java框架,系统讲解多智能体系统的开发方法。涵盖7种核心协作模式:Pipeline流水线、Routing路由、Handoffs智能体交接、Supervisor监督器、Subagent子智能体、Skills技能系统及Workflow工作流。详细阐述ReActAgent、AgentScopeAgent、StateGraph等核心概念,提供完整的配置示例与代码实现,帮助开发者快速掌握基于Spring AI Alibaba的多智能体应用开发。

program哲学 163

ADO.NET Data Services 新功能

時間回到 2007 年 … 筆者當時剛好也正在關注 Visual Studio “Orcas” (即 Visual Studio 2008) Beta 的事宜,以及微軟的新一代資料存取技術 Entity Framework ...

cini4443的博客 197

15、分布式参数热交换器:建模、动态特性与控制

本文综述了分布式参数热交换器的建模、动态特性和控制方法。从热交换器的基本方程推导出发,探讨了一维流动、流动强迫、错流、螺旋和旋转再生式热交换器的建模方法,并分析了其动态行为和频率响应中的共振现象。同时,介绍了热交换器的模拟方法,包括数值模拟和近似方法,并讨论了多种控制策略,如常规控制、最优控制、数字控制以及自适应控制。最后,总结了热交换器研究的发展历程,并展望了未来的研究方向,包括建模精度提升、控制算法优化和跨学科融合等。

w8x9y0z1的博客 123

ADO.NET Data Services Framework 基础概述

ADO.NET Data Services Framework 基础概述 随着.NET Framework 4.0 及 Visual Studio 2010 的发布, ADO.NET Data Services Framework 2.0 的版本也将同时发布,新的.Net 4.0 也会支持 System.Data.Services 空间方法库,这说明ADODSF将会得到进一...

188

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

第17课 数据与通信之ADO.NET Data Services

  概述 本文将简单介绍在Silverlight 2中如何调用ADO.NET Data Services。  

光脚丫思考的专栏 906

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

为什么微软要推 ADO.NET Data Services Framework 转自 博客园 WizardWu

微软在 .NET 3.5 SP1 平台上,推了一组新的数据访问 Framework,叫做 ADO.NET DataServices。微软怕程序员太闲吗?为什么要创造 ADO.NET Data Services?Web Service 和 WCF不就很好用了吗?本帖整理一些研讨会及网络上大内高手的观点,并提供一个可在 VS 2008 SP1 上执行的示例给大家下载参考;但本帖不提供s

满地鸡毛 776

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

学习使用ADO.NET Data Services (ADO.NET 数据服务框架) - Part 1

学习使用ADO.NET Data Services (ADO.NET 数据服务框架)     ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的扩充功能,这个功能和概念在以前的.NET 1.0-.NET3.5 技术中都没有出现的新概念,它主要用途是可以很容易的将数据库服务公开在网络上,然后透过URL网址就可以对数据库进行CR...

weixin_34377065的博客 187

艾伟:为什么微软要推 ADO.NET Data Services Framework

  微软在 .NET 3.5 SP1 平台上,推了一组新的数据访问 Framework,叫做 ADO.NET Data Services。微软怕程序员太闲吗?为什么要创造 ADO.NET Data Services?Web Service 和 WCF 不就很好用了吗?本帖整理一些研讨会及网络上大内高手的观点,并提供一个可在 VS 2008 SP1 上执行的示例给大家下载参考;但本帖不提供 ste...

weixin_33921089的博客 118

Microsoft.NET Framework4 Client Profile

.NET Framework           1、ASP .NET动态数据,它供给了丰富的框架,从而用户可以 快速进行数据驱动的开发,而无需编写代码;ASP .NET AJA 的一项新增功效,对管理浏览器历史记录供给了支撑(支撑后退按钮)。   2、对公共语言运行时的核心改良包含:改良了.NET Framework本机映像的布局、选择不再对完整受信任的程序集进行强名称验证、进步了利

u012219931的专栏 999
上一篇: 精进不休 .NET 4.0 (5) - C# 4.0 新特性之并行运算(Parallel)
下一篇: 精进不休 .NET 4.0 (7) - ADO.NET Entity Framework 4.0 新特性
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值