求教WCF和LinqToSQL处理多表关联问题。
首先在WCF中不能返回有多表关联的表,其次不能修改有多表关联表的记录。求教以下解决方案。
[解决办法]
“镰刀”让楼主头脑发热,希望用镰刀练出葵花宝典。
这个热情不错,不过我会把目标关注在其它地方。
[解决办法]
7楼说得很对, WCF 可以说是和 Linq to SQL 没有直接关系的。
楼主,由于我早就不用 Linq to SQL 了,代码也不好找,关于“离线实体反序列化后更新子表”的代码一时也没有找到完整版,暂只找到一个:
首先要说明一下: 主表、子表的主键字段均要设置“时间戳(即 Version 属性)”为 true,这很重要。
主表为 TMaster,子表为 TDetail, TDetail 的主键为int型,首先要先得到 子表 的哪些主键是新增的、更改的、删除的(上班中时间有限,就不写这些代码了)。
- C# code
/// <summary> /// 更新由反序列化后得到的“离线”实体 TMaster。 /// 首先要先得到 子表 的哪些主键是新增的、更改的、删除的 /// </summary> /// <param name="detachedMaster"></param> /// <param name="insertedIds"></param> /// <param name="updatedIds"></param> /// <param name="deletedIds"></param> /// <returns></returns> bool UpdateDetachedMaster(TMaster detachedMaster, int[] insertedIds, int[] updatedIds, int[] deletedIds) { using (DbDataContext db = new DbDataContext( connection ) { foreach (int detailId in insertedIds) { db.TDetail.InsertOnSubmit(detachedMaster.TDetail.First(detail => detail.detailId == detailId)); } foreach (int detailId in updatedIds) { db.TDetail.Attach(detachedMaster.TDetail.First(detail => detail.detailId == detailId), true); } foreach (int detailId in deletedIds) { db.TDetail.DeleteOnSubmit(detachedMaster.TDetail.First(detail => detail.detailId == detailId)); } db.TMaster.Attach(detachedMaster, true); // 可以获取 db.GetChangeSet() 进行日志操作等; db.SubmitChanges(); } return true; }