首页 新闻 会员 周边 捐助

entity frame work 如何批量添加数据?要一次性提交的,帮我分析代码

1
悬赏园豆:10 [待解决问题]
using (TransactionScope ts=new TransactionScope())
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            using (_objDb = new UnicornEntities())
                            {
                                tblUnicornWorkOrderSpentTime tuwostNew = tuwost;
                                tuwostNew.SpentTimeID = Guid.NewGuid();
                                tuwostNew.IsDeleted = false;
                                tuwostNew.CreatedByID = new Guid(_ownerId);
                                tuwostNew.CreatedDate = DateTime.Now;
                                tuwostNew.LastModifiedByID = new Guid(_ownerId);
                                tuwostNew.LastModifiedDate = DateTime.Now;
                                _objDb.tblUnicornWorkOrderSpentTime.AddObject(tuwostNew);
                                _objDb.SaveChanges();
                            }
                        }
                        //_objDb.SaveChanges(); 
                        //_objDb.AcceptAllChanges();
                        ts.Complete();
                    }

这上面的代码是我测试的,每次重新实例化的时候会出错,我是想一次性提交 如果中间过程出现问题则全部提交,求帮助

问题补充:
                using (_objDb = new UnicornEntities())
                {
                    using (TransactionScope ts=new TransactionScope())
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            
                                tblUnicornWorkOrderSpentTime tuwostNew = tuwost;
                                tuwostNew.SpentTimeID = Guid.NewGuid();
                                tuwostNew.IsDeleted = false;
                                tuwostNew.CreatedByID = new Guid(_ownerId);
                                tuwostNew.CreatedDate = DateTime.Now;
                                tuwostNew.LastModifiedByID = new Guid(_ownerId);
                                tuwostNew.LastModifiedDate = DateTime.Now;
                                _objDb.tblUnicornWorkOrderSpentTime.AddObject(tuwostNew);
                                _objDb.SaveChanges();
                            
                        }
                        //_objDb.SaveChanges(); 
                        //_objDb.AcceptAllChanges();
                        ts.Complete();
                    }
                }

异常: 属性“SpentTimeID”是对象的键信息的一部分,不能修改。

这个异常和上一个一样

                using (_objDb = new UnicornEntities())
                {
                    //using (TransactionScope ts=new TransactionScope())
                    //{
                        for (int i = 0; i < 5; i++)
                        {
                            
                                tblUnicornWorkOrderSpentTime tuwostNew = tuwost;
                                tuwostNew.SpentTimeID = Guid.NewGuid();
                                tuwostNew.IsDeleted = false;
                                tuwostNew.CreatedByID = new Guid(_ownerId);
                                tuwostNew.CreatedDate = DateTime.Now;
                                tuwostNew.LastModifiedByID = new Guid(_ownerId);
                                tuwostNew.LastModifiedDate = DateTime.Now;
                                _objDb.tblUnicornWorkOrderSpentTime.AddObject(tuwostNew);
                                //_objDb.SaveChanges();
                            
                        }
                        _objDb.SaveChanges(); 
                        //_objDb.AcceptAllChanges();
                    //    ts.Complete();
                    //}
                }

这种写法只能加一条,求解答

Jacob·雅各布的主页 Jacob·雅各布 | 初学一级 | 园豆:200
提问于:2012-07-02 09:07
< >
分享
所有回答(3)
0
using (_objDb = new UnicornEntities())
                            { 放到 for上面 試一下。
無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 09:29

试了,还是一样 放到Transaction外面也是一样 目前的错误是重复定义了通过一个表实体,所以循环到第二次就会出错,不让修改

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 09:32

@JacobX: 

tuwost 是什麽
你應該 每次 都new 一個新對象出來哦
支持(1) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 09:50

@無限遐想: 因为还不确定数据量,所以不知道需要new多少个,能给明示么

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:02

tuwost也是个实体,是传过来的  然后新实例化了一个放进去的

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:03

@JacobX: 

tuwostNew 你 這個對象 ,就沒有 變化哦。在循環中,始終是一樣
支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 10:06

@無限遐想: 對啊,那我該怎麽解決這個問題呢?我想傳來個集合,然後集合中裝載數據,在這邊循環出來,等动準備完畢了再統一提交

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:09

@JacobX: 

tblUnicornWorkOrderSpentTime 先 new 一個  對象 出來。然後 賦值就好了
支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 10:12

@無限遐想: 因為這裡要循環五次,到第二次的時候我依然new的,但是因為saveChanges了卻不能再提交,會出現錯誤 异常: 属性“SpentTimeID”是对象的键信息的一部分,不能修改。

using (_objDb = new UnicornEntities())
                {
                    //using (TransactionScope ts=new TransactionScope())
                    //{
                    _objDb.Connection.Open();
                    DbTransaction tran= _objDb.Connection.BeginTransaction();
                    for (int i = 0; i < 5; i++)
                    {
                        tblUnicornWorkOrderSpentTime tuwostNew = new tblUnicornWorkOrderSpentTime();
                        tuwostNew=tuwost;
                        tuwostNew.SpentTimeID = Guid.NewGuid();
                        tuwostNew.IsDeleted = false;
                        tuwostNew.CreatedByID = new Guid(_ownerId);
                        tuwostNew.CreatedDate = DateTime.Now;
                        tuwostNew.LastModifiedByID = new Guid(_ownerId);
                        tuwostNew.LastModifiedDate = DateTime.Now;
                        _objDb.tblUnicornWorkOrderSpentTime.AddObject(tuwostNew);
                        _objDb.SaveChanges();
                    }
                    tran.Commit();
                    //_objDb.SaveChanges(); 
                    //_objDb.AcceptAllChanges();
                    //    ts.Complete();
                    //}
                }
支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:15

@JacobX: tuwostNew=tuwost; 這裡 不要這麼賦值。

要 一個一個屬性 賦值。然後 看 Guid.NewGuid(); 是不是每次 都不一樣呢

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 10:16

@無限遐想: 是的额  Guid.NewGuid();每次都不一樣的

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:23

@JacobX: SpentTimeID 是關鍵字嗎?不同的實例,是可以新增 成功的哦。或則 你先 把 tuwostNew=tuwost; 去掉 看看

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 10:29

@無限遐想: spentTimeId是主鍵,去掉了也是不好使的,只要saveChanges之後就提示不能修改這個問題,要是不saveChanges或者再外面changes是能添最後一次循環的結果

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:31

@JacobX: tuwostNew=tuwost;把 這個 去掉,執行 一下。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-02 10:38

@無限遐想: 解決了,saveChangs(false);就好了

 using (_objDb = new UnicornEntities())
                {
                    using (var ts = new TransactionScope())
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            tblUnicornWorkOrderSpentTime tuwostNew = tuwost;
                            tuwostNew.SpentTimeID = Guid.NewGuid();
                            tuwostNew.IsDeleted = false;
                            tuwostNew.CreatedByID = new Guid(_ownerId);
                            tuwostNew.CreatedDate = DateTime.Now;
                            tuwostNew.LastModifiedByID = new Guid(_ownerId);
                            tuwostNew.LastModifiedDate = DateTime.Now;
                            _objDb.tblUnicornWorkOrderSpentTime.AddObject(tuwostNew);
    #pragma warning disable 612,618
                            _objDb.SaveChanges(false);
    #pragma warning restore 612,618
                        }
                        ts.Complete();
                    }
                }

Thank you

支持(0) 反对(0) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 10:57
0

批量保存,好像不行吧

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-07-02 10:25
0

呵呵.兄弟实体框架你感觉性能如何?只要看到如此语句.我都害怕他的性能

[秦时明月] | 园豆:738 (小虾三级) | 2012-07-02 11:15

感觉还行啊 ,方便好用 速度也快

支持(0) 反对(1) Jacob·雅各布 | 园豆:200 (初学一级) | 2012-07-02 11:21

@JacobX: 

给我写一个demo好不好.可以运行的.我测试一下,我以前用的时候简直是蜗牛,4.0

支持(0) 反对(0) [秦时明月] | 园豆:738 (小虾三级) | 2012-07-02 11:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册