读书人

求教WCF和LinqToSQL处理多表关联有关问

发布时间: 2012-01-03 22:16:06 作者: rapoo

求教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;        } 

读书人网 >.NET

热点推荐