本文发表在 rolia.net 枫下论坛简单来讲就是一个 entity 带着一大堆 child entities,有 one-to-one, 也有 one-to-many
比如
customer
- contact
- orders
- comments
在 front-end UI 上有 multiple tab pages,只有点到 contact 的 tab 我才想 load contact entity,否则就只是最基本的 customer
lazy loading 在 webservice 里比较麻烦的问题就是,如果 data contract 定义了所有的 children,那每次 send request, xml serialization 都会请求所有的 children 无论我的 data service logic 是不是用了什么 lazy loading method 都好。
那最简单的方法就是(我能想到的),data contract 不定义所有的 children,但是在 presentation entity 里需要定义,并使用 xmlIgnore 掉那些 properties of child entities,我还需要有一个 ListProxy 那样的东西
然后从原来的一个 service op:
GetCustomerByID
再加上
- GetContactByCustomerID
- GetOrdersByCustomerID
- GetCommentsByCustomerID
新的写法就变成
public Contact Contact
{
get
{
if (_contact == null)
{
_contact = ServiceClient.GetContactByCustomerID( this.ID );
}
return _contact
}
}
嗯,我解释得够清楚吗?
除了这种方法,还有别的吗?
主要是这样做,在 get 的时候还算 ok,但是在 save 的时候我需要在 data service 那里做很多特殊的处理更多精彩文章及讨论,请光临枫下论坛 rolia.net
比如
customer
- contact
- orders
- comments
在 front-end UI 上有 multiple tab pages,只有点到 contact 的 tab 我才想 load contact entity,否则就只是最基本的 customer
lazy loading 在 webservice 里比较麻烦的问题就是,如果 data contract 定义了所有的 children,那每次 send request, xml serialization 都会请求所有的 children 无论我的 data service logic 是不是用了什么 lazy loading method 都好。
那最简单的方法就是(我能想到的),data contract 不定义所有的 children,但是在 presentation entity 里需要定义,并使用 xmlIgnore 掉那些 properties of child entities,我还需要有一个 ListProxy 那样的东西
然后从原来的一个 service op:
GetCustomerByID
再加上
- GetContactByCustomerID
- GetOrdersByCustomerID
- GetCommentsByCustomerID
新的写法就变成
public Contact Contact
{
get
{
if (_contact == null)
{
_contact = ServiceClient.GetContactByCustomerID( this.ID );
}
return _contact
}
}
嗯,我解释得够清楚吗?
除了这种方法,还有别的吗?
主要是这样做,在 get 的时候还算 ok,但是在 save 的时候我需要在 data service 那里做很多特殊的处理更多精彩文章及讨论,请光临枫下论坛 rolia.net