积极答复者
Ria Service 怎样表示主从关系表连接查询的结果!我只会对单个表操作!

问题
-
如下,我的主表Element(ElemntID,ElementType,GeometryPoint)
从表WaterMeter(ID,ElementID) 且ElementID参照Element(ElementID)
public void LoadWaterMeterElement()
{
BSContext client = new BSContext();
LoadOperation<WaterMeter> lo = client.Load(client.GetWaterMeterQuery(),WaterMeterElementCallBack, null); //???我想获取Element和WaterMeter的链接查询的结果,这里该怎么写啊!
}
public void WaterMeterElementCallBack(LoadOperation<WaterMeter> lo)
{}
ria service 的联接查询怎么弄啊?想获取Element和WaterMeter的链接查询的结果!
答案
-
你加了[Include] attribute了?
我发现在自动产生的 BSService.metadata.csElement实体中已经包含了EntityCollection<WaterMeter> WaterMeter;
internal sealed class ElementMetadata
{
public EntityCollection<WaterMeter> WaterMeter { get; set; }
}
但在WaterMeter 只有Element Element
internal sealed class WaterMeterMetadata
{
//public Element Element { get; set; } //我把这句话给该了,改成了下面的了。貌似我这样改了的话好像把整个关系弄乱了!
public EntityCollection<Element> Element { get; set; } 在上面加上[Include]就可以了。
}
谢谢,加上[Include],Element不再为空!这个联合查询的问题已经解决了!
但好像自动生成的关系,与我需求的好像弄反了,不知道能不能像那样更改原有的关系!
- 已标记为答案 joetao 2010年5月12日 2:50
全部回复
-
这个要在Server实现:
- 在DomainService metadata 里WaterMeter partial class中,在Element上添加[Include] 属性
- 在查询方法中,用 return this.ObjectContext.WaterMeters.Include("Element");
这样在client端,你直接load WaterMeter,每个Entity都有对应的Element property.
嗯!谢谢了!帮我解决了在整个项目中都时常要用的方法!
刚开始还准备在client用Linq 做表的join操作!看来是不行的啊(当时想的是我的WaterMeter类型怎么表示他们的联结查询结果呢!所以在这里卡住了!)
之后看了Jeff Handley 写的ContosoSales 的例子也是这样写的!
return from store in this.ObjectContext.Stores.Include("StoreContacts").Include("StoreContacts.Contact") orderby store.StoreName select store;
-
我Service中的这样写的
public IQueryable<WaterMeter> GetWaterMeterElement()
{
return this.ObjectContext.WaterMeter.Include("Element");
}client我是这样写的,但还是没得到他们联合查询结果啊?不知道为什么?
public void LoadWaterMeterElement()
{
BSContext client = new BSContext();
LoadOperation<WaterMeter> lo = client.Load(client.GetWaterMeterElementQuery(),WaterMeterElementCallBack, null);}
public void WaterMeterElementCallBack(LoadOperation<WaterMeter> lo)
{
BSContext client = new BSContext();
foreach (WaterMeter waterMeter in lo.Entities)
{
string geometryPoint = waterMeter.Element.GeometryPoint; //经调试发现waterMeter.Element任然为null,证明还是没有做联合查询啊!
int waterMeterID = waterMeter.ID;
DrawElement(geometryPoint, waterMeterID);
}
}不知道为什么?请大家帮忙解决下!
-
你加了[Include] attribute了?
我发现在自动产生的 BSService.metadata.csElement实体中已经包含了EntityCollection<WaterMeter> WaterMeter;
internal sealed class ElementMetadata
{
public EntityCollection<WaterMeter> WaterMeter { get; set; }
}
但在WaterMeter 只有Element Element
internal sealed class WaterMeterMetadata
{
//public Element Element { get; set; } //我把这句话给该了,改成了下面的了。貌似我这样改了的话好像把整个关系弄乱了!
public EntityCollection<Element> Element { get; set; } 在上面加上[Include]就可以了。
}
谢谢,加上[Include],Element不再为空!这个联合查询的问题已经解决了!
但好像自动生成的关系,与我需求的好像弄反了,不知道能不能像那样更改原有的关系!
- 已标记为答案 joetao 2010年5月12日 2:50