现在的位置: 首页 > 综合 > 正文

ADO.NET Data Service

2011年07月14日 ⁄ 综合 ⁄ 共 7432字 ⁄ 字号 评论关闭

 

 

关于ADO.NET Entity Framework部分的内容见ADO.NET Entity Framework(1-4)

http://www.cnblogs.com/foundation/archive/2008/10/06/1304718.html

 

本文例子下载: http://files.cnblogs.com/wxwinter/lz.rar

 

 

目录

1    ADO.NET Data Service介绍    2

2    创建DataService项目    3

2.1    数据表    3

2.2    创建ASPNET项目    4

2.3    添架ADONET Entity模型    6

2.4    添加ADO.NET数据服务    10

2.5    在浏览器中查看    12

3    NET客启访问DataService    13

3.1    引用数据服务    13

3.2    查询    15

3.3    添加    15

3.4    修改    16

3.5    删除    16

3.6    异步查询    17

4    Silverlight客启访问DataService    18

4.1    引用服务    18

4.2    xaml页面    19

4.3    查询(WebClient方式)    20

4.4    查询    21

4.5    添加    22

4.6    编辑    22

4.7    删除    23

5    URL访问    24

5.1    运算符    24

5.2    关键字    24

5.3    函数    25

5.4    例1:直接访问Entity数据    26

5.5    例2:使用条件    28

5.6    例3:排序    29

5.7    例4:分页    31

5.8    例5:函数的使用    32

6    WEB方法    33

6.1    服务    33

6.2    访问    34

7    拦截器    35

7.1    查询拦截    35

7.2    修改拦截器    36

 

 

ADO.NET Data Service介绍

 

1.ADO.NET Data Service的DataServiceHost是一个WCF Service,由System.Data.Services.DataService<T>提供来自NET3.5 SP1 类库中的System.Data.Services.dll

 

2.DataServices会自动为加载的Entity对象生成具有增查删改功能的WCF服务

 

3.DataServices是以Http方式与客户端进行通信.任何可以实现HTTP访问的客户端,都可以与DataServices交互

 

4. NET3.5 SP1的客户端可以使用System.Data.Services.Client.DataServiceContext与DataServices交互,该类来自NET3.5 SP1 类库中的System.Data.Services.Client.dll 文件

 

5. Silverlight 2.0客户端可以使用System.Data.Services.Client.DataServiceContext与DataServices交互,该类来自Silverlight 2.0 类库中的System.Data.Services.Client 文件

 

6.DataServices提供ATOM与JSON两种格式用来描述数据结构,说明如下:

ATOM

RSS类似,也是建立在XML数据格式的基础之上的

Atom相对RSS格式而言,进行了扩展,提供了比RSS更多的项目属性

JSON

格式如下

{

"name": "wxd",

"time": "2008/10/10 10:10",

"value": 123.456,

"list": [ "wxwinter", "lzm"]

}

 

创建DataService项目

数据表

tabA

 

 

tabX

创建ASPNET项目

 

添架ADONET Entity模型

 

 

 

 

 

 

添加ADO.NET数据服务

 


public
class
myWebDataService : DataService<myDBEntities>

{


public
static
void InitializeService(IDataServiceConfiguration config)

{

config.SetEntitySetAccessRule("*", EntitySetRights.All);


// * :表示全部实体集


// EntitySetRights.All : 表示全部的操作权限

}

}

 

在浏览器中查看

NET客启访问DataService

引用数据服务

 

查询


//查询


private
void button1_Click(object sender, EventArgs e)

{


Uri url = new
Uri("http://localhost:1468/myWebDataService.svc");

myService.myDBEntities server = new WinFormClient.myService.myDBEntities(url);

 


foreach (var v in server.tabA)

{

 


Console.WriteLine("{0},{1},{2}", v.a, v.b, v.c);

}


//-


foreach (var v in server.tabX.Where(p=>p.x=="002"))

{

 


Console.WriteLine("{0},{1},{2}", v.x, v.y, v.z);

}

 

}

 

lzm ,2 ,5

wxd ,1 ,4

wxwinter ,3 ,6

002 ,8 ,llzzmm

添加


//添加


private
void button2_Click(object sender, EventArgs e)

{


Uri url = new
Uri("http://localhost:1468/myWebDataService.svc");

myService.myDBEntities server = new WinFormClient.myService.myDBEntities(url);

 

server.AddTotabA(new myService.tabA() { a = "wxdlzm", b = "333", c = "xxx" });

 

server.SaveChanges();

}

 

修改


//修改


private
void button3_Click(object sender, EventArgs e)

{


Uri url = new
Uri("http://localhost:1468/myWebDataService.svc");

myService.myDBEntities server = new WinFormClient.myService.myDBEntities(url);


var v = server.tabA.Where(p => p.a == "wxdlzm").First();

v.b = "hello";

server.UpdateObject(v);

server.SaveChanges();

}

 

 

删除


//删除


private
void button4_Click(object sender, EventArgs e)

{


Uri url = new
Uri("http://localhost:1468/myWebDataService.svc");

myService.myDBEntities server = new WinFormClient.myService.myDBEntities(url);


var v = server.tabA.Where(p => p.a == "wxdlzm").First();

server.DeleteObject(v);

server.SaveChanges();

}

 

 

异步查询

//异步查询

 

myService.myDBEntities server1;

 


//开始查询


private
void button5_Click(object sender, EventArgs e)

{


Uri url = new
Uri("http://localhost:1468/myWebDataService.svc");


Uri urlE = new
Uri("http://localhost:1468/myWebDataService.svc/tabX");

server1 = new WinFormClient.myService.myDBEntities(url);

 

server1.BeginExecute<myService.tabX>(urlE, new
AsyncCallback(executed), null);

}


//返回结果


void executed(IAsyncResult obj)

{


var tp = server1.EndExecute<myService.tabX>(obj);

 


foreach (var v in tp)

{


Console.WriteLine("{0},{1},{2}", v.x, v.y, v.z);

}

 

}

 

Silverlight客启访问DataService

Silverlight 2.0 可以利用两种方法与DataServices交互:

  • HttpWebRequest 与 HttpWebResponse
  • System.Data.Services.Client.DataServiceContext

Silverlight 2.0 是使用异步方法来连接远程数据源。

 

LINQ 的 select ,要用 BeginExecute() 和 EndExecute()

LINQ 的 SaveChanges(),要用 BeginSaveChanges() 和 EndSaveChanges()

 

 

引用服务

 

xaml页面


<StackPanel Loaded="StackPanel_Loaded">


<data:DataGrid Name="dg"></data:DataGrid>


<Button Content="DataServiceContext方式加载数据" Width="200" Click="loadData_Click" />


<Button Content="WebClient方式加载数据" Width="200" Click="loadData2_Click" />


<Button Content="添加" Width="200" Click="add_Click" />


<Button Content="修改" Width="200" Click="edit_Click" />


<Button Content="删除" Width="200" Click="del_Click" />


</StackPanel>

myService.myDBEntities server;


private
void StackPanel_Loaded(object sender, RoutedEventArgs e)

{


Uri url = new
Uri("http://localhost:1468/myWebDataService.svc");

server = new myService.myDBEntities(url);

}


void saveChanges_completed(IAsyncResult obj)

{

 

}

 

查询(WebClient方式)


//WebClient方式加载数据


private
void loadData2_Click(object sender, RoutedEventArgs e)

{


Uri uri = new
Uri("http://localhost:1468/myWebDataService.svc/tabA");


WebClient client = new
WebClient();

client.OpenReadCompleted += new
OpenReadCompletedEventHandler(client_completed);

client.OpenReadAsync(uri);

}

 


void client_completed(object sender, OpenReadCompletedEventArgs e)

{


if (e.Error == null)

{


XmlReader reader = XmlReader.Create(e.Result);


XDocument ls = XDocument.Load(reader);


XNamespace xmlns = "http://www.w3.org/2005/Atom";


XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";


XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";

 


var list = from x in ls.Descendants(xmlns + "entry")


select
new myService.tabA

{

a= x.Descendants(d + "a").First().Value, b = x.Descendants(d + "b").First().Value, c = x.Descendants(d + "c").First().Value

};

dg.ItemsSource = list;

}

}

 

查询

 


//加载


private
void loadData_Click(object sender, RoutedEventArgs e)

{


Uri urlE = new
Uri("http://localhost:1468/myWebDataService.svc/tabX");

server.BeginExecute<myService.tabX>(urlE, new
AsyncCallback(load_completed), null);

}

 


void load_completed(IAsyncResult obj)

{


var tp = server.EndExecute<myService.tabX>(obj);


this.dg.ItemsSource = tp.ToList();

}

 

添加


//添加


private
void add_Click(object sender, RoutedEventArgs e)

{

server.AddTotabX(new myService.tabX() { x="007",z="sss",y="sss" });

server.BeginSaveChanges(new
AsyncCallback(saveChanges_completed), null);

}

 

编辑


//编辑


private
void edit_Click(object sender, RoutedEventArgs e)

{


Uri urlE = new
Uri("http://localhost:1468/myWebDataService.svc/tabX");

server.BeginExecute<myService.tabX>(urlE, new
AsyncCallback(begin_edit), null);

}


void begin_edit(IAsyncResult obj)

{


var tp = server.EndExecute<myService.tabX>(obj).Where(p => p.x == "007 ").First();

tp.y = "hello";

server.UpdateObject(tp);

server.BeginSaveChanges(new
AsyncCallback(saveChanges_completed), null);

}

 

删除


//删除


private
void del_Click(object sender, RoutedEventArgs e)

{


Uri urlE = new
Uri("http://localhost:1468/myWebDataService.svc/tabX");

server.BeginExecute<myService.tabX>(urlE, new
AsyncCallback(begin_del), null);

}

 


void begin_del(IAsyncResult obj)

{


var tp = server.EndExecute<myService.tabX>(obj).Where(p => p.x == "007 ").First();

server.DeleteObject(tp);

server.BeginSaveChanges(new
AsyncCallback(saveChanges_completed), null);

 

}

 

 

 

 

 

URL访问

 

DataService 支持URL方式访问

格式

http://[Url]/[ServiceName]/[EntityName]/[NavigationOptions]?[QueryOptions]

Url: 数据服务所在的网址

ServiceName: 数据服务的名称

EntityName: Entity 名称或是 Service 方法名称

NavigationOptions: 查询 Entity 中关联的设定

QueryOptions: 查询的选项

 

运算符

运算符

说明

and

 

or

 

not

 

eq

=

ne

!=

lt

<

gt

>

le

<=

ge

>=

add

+

sub

-

mul

*

div

/

mod

余数

()

 

 

关键字

expand

类似于LINQ中的LoadOptions,以此来指定加载此对象相关的通过expand指定的对象。如果需要加载多个对象,用逗号分隔。

orderby

指定排序方式。语法为:$orderby=Field [ASC|DESC], [Field[ASC|DESC]]

Skip

Top

类似于LINQ中的Skip(PageSize * PageIndex).Take(PageSize)用来实现分页。

Filter

通过filter这个参数可以在URL里传递过滤条件。

 

函数

bool substringof(string p0, string p1)

 

bool startswith(string p0, string p1)

 

int indexof(string arg)

 

string remove(string p

抱歉!评论已关闭.