ADO.NET Data Service

关于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 p0, int pos)

 

string remove(string p0, string find, string replace)

 

string substring(string p0, int pos, int length)

 

string toupper(string p0)

 

string concat(string p0, string p1)

 

bool endswith(string p0, string p1)

 

int length(string p0)

 

string insert(string p0,int pos, string p1)

 

string remove(string p0, int pos, int length)

 

string substring(string p0, int pos)

 

string tolower(string p0)

 

string trim(string p0)

 

int day(DateTime)

 

int month(DateTime)

 

int hour(DateTime)

 

int second(DateTime)

 

int minute(DateTime)

 

int year(DateTime)

 

double round(double)

 

decimal floor(decimal)

 

decimal round(decimal)

 

double ceiling(double)

 

double floor(double)

 

decimal ceiling(decimal)

 

例1:直接访问Entity数据


http://localhost:1468/myWebDataService.svc/tabA


由于返回的数据是ATOM格式的,如果浏览器支持该格式,会用阅读方式打开,如IE7用RSS阅读器方式打开

以下是返回的数据


<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<feed xml:base="http://localhost:1468/myWebDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">

<title type="text">tabA</title>

<id>http://localhost:1468/myWebDataService.svc/tabA</id>

<updated>2008-11-17T11:14:32Z</updated>

<link rel="self" title="tabA" href="tabA" />

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘lzm%20%20%20%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:14:32Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘lzm%20%20%20%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">lzm </d:a>

<d:b xml:space="preserve">2 </d:b>

<d:c xml:space="preserve">5 </d:c>

</m:properties>

</content>

</entry>

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxd%20%20%20%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:14:32Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxd%20%20%20%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxd </d:a>

<d:b xml:space="preserve">1 </d:b>

<d:c xml:space="preserve">4 </d:c>

</m:properties>

</content>

</entry>

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxdlzm%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:14:32Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxdlzm%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxdlzm </d:a>

<d:b xml:space="preserve">333 </d:b>

<d:c xml:space="preserve">xxx </d:c>

</m:properties>

</content>

</entry>

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxwinter%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:14:32Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxwinter%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxwinter </d:a>

<d:b xml:space="preserve">3 </d:b>

<d:c xml:space="preserve">6 </d:c>

</m:properties>

</content>

</entry>

</feed>

例2:使用条件


http://localhost:1468/myWebDataService.svc/tabA?$filter=a eq ‘wxd‘


http://localhost:1468/myWebDataService.svc/tabA?$filter=(a eq ‘wxwinter‘) and (b eq ‘3‘)


<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<feed xml:base="http://localhost:1468/myWebDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">

<title type="text">tabA</title>

<id>http://localhost:1468/myWebDataService.svc/tabA</id>

<updated>2008-11-17T11:26:29Z</updated>

<link rel="self" title="tabA" href="tabA" />

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxd%20%20%20%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:26:29Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxd%20%20%20%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxd </d:a>

<d:b xml:space="preserve">1 </d:b>

<d:c xml:space="preserve">4 </d:c>

</m:properties>

</content>

</entry>

</feed>

例3:排序


http://localhost:1468/myWebDataService.svc/tabA?$filter=a ne ‘wxd‘ &$orderby=b


<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<feed xml:base="http://localhost:1468/myWebDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">

<title type="text">tabA</title>

<id>http://localhost:1468/myWebDataService.svc/tabA</id>

<updated>2008-11-17T11:28:10Z</updated>

<link rel="self" title="tabA" href="tabA" />

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘lzm%20%20%20%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:28:10Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘lzm%20%20%20%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">lzm </d:a>

<d:b xml:space="preserve">2 </d:b>

<d:c xml:space="preserve">5 </d:c>

</m:properties>

</content>

</entry>

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxwinter%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:28:10Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxwinter%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxwinter </d:a>

<d:b xml:space="preserve">3 </d:b>

<d:c xml:space="preserve">6 </d:c>

</m:properties>

</content>

</entry>

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxdlzm%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:28:10Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxdlzm%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxdlzm </d:a>

<d:b xml:space="preserve">333 </d:b>

<d:c xml:space="preserve">xxx </d:c>

</m:properties>

</content>

</entry>

</feed>

例4:分页


http://localhost:1468/myWebDataService.svc/tabA?$filter=a ne ‘wxd‘ &$orderby=b &$skip=2&top=2


<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<feed xml:base="http://localhost:1468/myWebDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">

<title type="text">tabA</title>

<id>http://localhost:1468/myWebDataService.svc/tabA</id>

<updated>2008-11-17T11:30:20Z</updated>

<link rel="self" title="tabA" href="tabA" />

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxdlzm%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T11:30:20Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxdlzm%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxdlzm </d:a>

<d:b xml:space="preserve">333 </d:b>

<d:c xml:space="preserve">xxx </d:c>

</m:properties>

</content>

</entry>

</feed>

例5:函数的使用


http://localhost:1468/myWebDataService.svc/tabA?$filter=a eq trim(‘ wxd ‘)


<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<feed xml:base="http://localhost:1468/myWebDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">

<title type="text">tabA</title>

<id>http://localhost:1468/myWebDataService.svc/tabA</id>

<updated>2008-11-17T12:01:49Z</updated>

<link rel="self" title="tabA" href="tabA" />

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘wxd%20%20%20%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T12:01:49Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘wxd%20%20%20%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">wxd </d:a>

<d:b xml:space="preserve">1 </d:b>

<d:c xml:space="preserve">4 </d:c>

</m:properties>

</content>

</entry>

</feed>

WEB方法

[WebGet] 使用 GET方式访问

[WebInvoke] 使用 POST/PUT/DELETE 方式访问

服务


public class myWebDataService : DataService<myDBEntities>

{

public static void InitializeService(IDataServiceConfiguration config)

{

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

// * :表示全部实体集

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

// config.SetServiceOperationAccessRule("getTabA", ServiceOperationRights.All);

config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);

// * :表示全部实体集

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

}

[WebGet]

public IQueryable<tabA> getTabA(string a)

{

var v= CurrentDataSource.tabA.Where(p => p.a == a);

return v;

}

[WebInvoke]

public IQueryable<tabX> getTabX(string x)

{

var v = CurrentDataSource.tabX.Where(p => p.x == x);

return v;

}

}

访问

方法名?参数=‘值


http://localhost:1468/myWebDataService.svc/getTabA?a=‘lzm‘


<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<feed xml:base="http://localhost:1468/myWebDataService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">

<title type="text">getTabA</title>

<id>http://localhost:1468/myWebDataService.svc/getTabA</id>

<updated>2008-11-17T02:23:29Z</updated>

<link rel="self" title="getTabA" href="getTabA" />

<entry>

<id>http://localhost:1468/myWebDataService.svc/tabA(‘lzm%20%20%20%20%20%20%20‘)</id>

<title type="text"></title>

<updated>2008-11-17T02:23:29Z</updated>

<author>

<name />

</author>

<link rel="edit" title="tabA" href="tabA(‘lzm%20%20%20%20%20%20%20‘)" />

<category term="myDBModel.tabA" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />

<content type="application/xml">

<m:properties>

<d:a xml:space="preserve">lzm </d:a>

<d:b xml:space="preserve">2 </d:b>

<d:c xml:space="preserve">5 </d:c>

</m:properties>

</content>

</entry>

</feed>

拦截器

查询拦截:当你仅仅想把具有某种状态或者特征的数据返回给客户端时,用拦截查询就可以实现

修改拦截:可以拦截提交到服务器的的数据更新操作:Add, Change ,Delete

查询拦截


public class myWebDataService : DataService<myDBEntities>

{

public static void InitializeService(IDataServiceConfiguration config)

{

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

// * :表示全部实体集

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

}

[QueryInterceptor("tabX")]

public System.Linq.Expressions.Expression<Func<tabX, bool>> query_tabX()

{

return p => p.z != "wwxxdd"; //为真表示允许查询

}

}


不使用QueryInterceptor的结果

使用QueryInterceptor的结果

修改拦截器


public class myWebDataService : DataService<myDBEntities>

{

public static void InitializeService(IDataServiceConfiguration config)

{

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

// * :表示全部实体集

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

}

[ChangeInterceptor("tabX")]

public void change_tabX(tabX en, UpdateOperations operation)

{

//-

if (operation == UpdateOperations.Add)

{

if (string.IsNullOrEmpty(en.y))

{

//如果[y]为空的处理代码

}

}

//-

if (operation == UpdateOperations.Change)

{ }

//-

if (operation == UpdateOperations.Delete)

{ }

}

}

时间: 2024-10-21 15:00:56

ADO.NET Data Service的相关文章

Silverlight 2 (beta1)数据操作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD操作

目录 导言 软件需求 在SQL 2005中创建数据库 在Visual Studio 2008中创建Silverlight工程和ADO.NET Data Service 创建一个XMLHttpRequestWrapper类 在Silverlight中使用Astoria进行CRUD操作 导言 Silverlight 2支持JSON.Web Service.WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中

自定义Data Service Providers

自定义Data Service Providers 作者:AlexJ 翻译:谈少民 原文链接:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx 简介 Data Services 建立于 Data Service Provider(数据服务提供者)之上,他负责Data Service与数据源之间的通讯. Data Services内置了一些提供者,而且也允许你自定

WCF Data Service ----理论准备

WCF数据服务(WCF Data Service )是.NET Framework的一个组件. 可以使用此组件创建一些服务,利用开放式数据协议(OData)来借助具象状态传输(REST)语义通过Web或Intranet公开和使用数据. OData(Open Data Protocol)开放数据协议 OData将数据公开为可通过URI寻址的资源,可使用GET.PUT.POST和DELETE这些标准HTTP谓词来访问和更改数据. OData使用Entity Data Model的实体关系约定,将资源

MS MDS系列之初识MS Master Data Service(微软主数据服务)

背景介绍: 主数据服务(Master Data Services)是微软平台支持的主数据管理(MDM)平台.类似MDS这样的系统,如果后续维护得当,会给企业提供一个强大的中心数据库系统,来防止企业数据变得不同步或不一致:同时也是企业内部管理数据流的可靠方式. 目前一个企业很多时候通过良性循环或者收购来实现业务增长.无论哪种方式,都将增加企业应用程序的数据流的数量和复杂度.如果断开和分离这些系统,将带来的各种问题,如数据不一致.数据数据碎片.数据不准确等等,并且对IT部门来讲,也会面对越来越多的困

Custom Data Service Providers

Custom Data Service Providers Introduction Data Services sits above a Data Service Provider, which is responsible for interacting with the underlying Data Source on behalf of the Data Service. Data Services ships with some internal providers, and mak

调用WCF Data Service的几点Tips

使用Linq实现sql in statement的时候,用EF的时候可以通过Contains.Exists的方法实现.但是在使用WCF Data Service的context的时候,会报不支持该方法的错误.解决方案就是加上AsEnumerable(). var products = from p in ctx.V_Product.AsEnumerable() where catalogs.Exists(c => c.CatalogID == p.CatalogID) select p 主从表级

开发客户端Data Service

服务提供了元数据查询 --myservice.svc/$metadata .net客户端:通过使用代理生成工具生成代理类 --datasvcutil /uri:<uri> /out:<directory/filename> AJAX客户端:通过javascript脚本库进行访问 --Data Service AJAX Liabrary --可以从Codeplex上下载

salesforce lightning零基础学习(六)Lightning Data Service(LDS)

本篇可参看:https://trailhead.salesforce.com/modules/lightning_data_service Lightning中针对object的detail页面,一个lightning app可能包含了多个components,多个components不可避免的会对这个数据进行CRUD操作,如果我们针对每个component都在init操作时后台SQL进行查询,然后赋值给前台变量,进行CUD操作时,还要考虑其他component的数据是否要级联的改变,这种操作以

[AngularFire2] Building an Authentication Observable Data Service

After successfully login, we want something help to check whether user has already login or not. And we will use Observable to do that. Create AuthInfo.ts: export class AuthInfo { constructor(private uid$: string){ } isLoggedIn() { return !!this.uid$