乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 77|回复: 4

绘制实体时发生eAlreadyInDb异常,求教

[复制链接]

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2012-9-12 10:30:00 | 显示全部楼层 |阅读模式
代码如下,我的思路是通过CreateBox()函数返回Solid3d列表 ,然后用DrawSolids进行一次性绘制,但是DrawSolids运行到
btr.AppendEntity(solid)时发出如题异常,字面意思可以理解为实体已存在于数据库中,但是之前CreateBox函数并没有进行相关操作,难道创建的任何实体不需要进行事务操作就进入数据库了?求解答

xwkxcwti0i5.jpg

xwkxcwti0i5.jpg


  1.         
  2. private static Solid3d CreateBox(PipeInfo info) {
  3.             Solid3d box = new Solid3d();
  4.             box.CreateBox(info.lenght, info.width, info.pipeLine.Length);
  5.             box.Layer = info.layer;
  6.             return box;
  7.         }
  1.        private static void DrawSolids(List solids) {
  2.             Database db = Autodesk..ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  3.             using (Transaction tran =db.TransactionManager.StartTransaction()) {
  4.                 BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  5.                 BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  6.                 foreach (Solid3d solid in solids){
  7.                     btr.AppendEntity(solid);//-----------此句出现eAlreadyInDb异常
  8.                     tran.AddNewlyCreatedDBObject(solid, true);
  9.                 }
  10.                 tran.Commit();
  11.             }
  12.         }

回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2012-9-12 10:55:00 | 显示全部楼层
代码没有看到 List solids 是怎么来的,或许solids里面的对象重复了。
回复

使用道具 举报

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2012-9-12 11:21:00 | 显示全部楼层

不会重复的,代码如下,其中PipeInfo 是根据图形中的线提取的信息复制代码
回复

使用道具 举报

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2012-9-12 11:48:00 | 显示全部楼层
自己已解决,是参数传递的原因,将DrawSolids(List solids)改变传递方式即可,
DrawSolids ( ref List solids),即用引用传递
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2012-9-12 11:52:00 | 显示全部楼层
if (solid.ObjectId == ObjectId.Null)
{
                 btr.AppendEntity(solid);
                 tran.AddNewlyCreatedDBObject(solid, true);
}
那这样试试
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 13:45 , Processed in 2.567135 second(s), 88 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表