2010-06-24 45 views
1

这里LINQ到SQL问题中插入多个对象是我的对象关联:是相同

Summary 
-> Job 
    -> Operator 
-> Job 
    -> Operator 

所以,我有一个包含乔布斯的集合,其中有一个操作员对象(时钟汇总对象#,名称等)

创建新摘要时,我会检查并创建存在的新作业并添加所有属性。然后,在构建的Summary对象上执行一次插入。然后,如果需要,这会插入新的作业和操作员,否则我可能会从数据库中读取现有的作业和操作员。

当我具有相同的Operator运行这两个作业并且运算符不存在于数据库中时,问题就出现了。 Linq-To-SQL试图插入同一个对象两次并失败,因为我使用时钟#作为主键。

我可以为主键创建一个自动编号,但然后我会重复数据,我宁愿不这样做。有没有人有任何想法来解决这个问题?

谢谢!

+0

新问题...当我在创建摘要的子对象期间尝试插入操作符时(通过循环),Linq尝试提交所有更改(包括部分构建的摘要)。有一些未填充的日期字段导致插入操作崩溃。另外,我正在使用StructureMap来缓存数据库,因此不同的存储库应该使用相同的实例。 – Dragn1821 2010-06-24 18:27:49

回答

1

我认为问题在于如何编写对象创建。我还没有看到你的代码,但我认为你正在做这样的事情:

Summary summary = new Summary 
            { 
             Jobs = new List<Job> 
               { 
                new Job 
                 { 
                  Operator = new Operator {Name = "foo"} 
                 }, 
                new Job 
                 { 
                  Operator = new Operator {Name = "foo"} 
                 } 
               } 
            }; 

如果这是你的情况下,尝试实例化操作“foo”的事前,然后将其分配给两个作业。

如果您已经完成并仍然出现错误,那么您应该先创建操作员并将其保存到数据库,然后检索并将其分配给所需的作业。

+0

是的,它与此类似。唯一的区别是你创建新的操作符的地方,我会首先检查数据库,如果存在的话从那里拉。 我曾考虑过你的解决方案,但我担心它会花很多时间来重写我们已经构建的东西。希望能有一个简单的属性,我可以打开和Linq会检查这种事情... – Dragn1821 2010-06-24 12:34:58

+0

当添加新的运算符来查看是否有多个作业时,必须执行检查... if所以和操作符是一样的,然后将第二个作业中的操作符对象设置为第一个作业中的操作符对象的值(而不是为第二个作业创建一个新的操作符)。 似乎工作。 – Dragn1821 2010-06-30 15:18:41