Linq to SQL使用子对象添加对象

时间:2016-10-13 14:41:27

标签: vb.net linq-to-sql foreign-key-relationship

我有一个表“Claim”,其中包含与“MobClaim”的连接。 “Claim”可以有0或1个“MobClaims”。在使用Linq to SQL插入“MobClaim”的同时,我似乎无法弄清楚如何插入“Claim”。

 Dim newClaim As New Claim With {.ClaimTypeId = 1,
                                 .DateCreated = DateTime.Now,
                                 .ClaimStatusId = 2
                                }
 Dim newMobClaim = New MobClaim() With {.AccountNumber = data.AccountNumber}

两个表的主键上都有IDENTITY(1,1),因此数据库会生成其他ID。 MobClaimId(主键)连接到Claim上的DataId(外键)。当我尝试将MobClaim添加到声明的MobClaims集合时,我收到一个错误;当我尝试单独添加MobClaim然后更新Claim上的DataId时,我得到一个不同的错误。

2 个答案:

答案 0 :(得分:0)

首先使用主键插入一个,然后将另一个记录上的外键设置为自动生成的主键。

Using dc As New YourLinq2SqlDataContext()

    Dim newMobClaim = New MobClaim() With
        {
            .AccountNumber = Data.AccountNumber
        }
    dc.MobClaims.InsertOnSubmit(newMobClaim)
    dc.SubmitChanges()

    Dim newClaim As New Claim With
        {
            .ClaimTypeId = 1,
            .DateCreated = DateTime.Now,
            .ClaimStatusId = 2,
            .DataId = newMobClaim.MobClaimId
        }
    dc.Claims.InsertOnSubmit(newClaim)
    dc.SubmitChanges()

End Using

答案 1 :(得分:0)

实际上,我最终做的是改变表格......

我试图做的是:

使用Claim.DataId - > MobClaim.MobClaimId(主要)关系。

我把它改为:

Claim.ClaimId(主要) - > MobClaim.ClaimId的关系。

现在它的工作原理如下:

 Dim newClaim As New Claim With {.ClaimTypeId = 1,
                                 .DateCreated = DateTime.Now,
                                 .CreatedBy = 3,
                                 .ClaimStatusId = 4
                                 }
 newClaim.MobClaims.Add(New MobClaim() With {.AccountNumber = data.AccountNumber})

 Using service As New ClaimsService
     service.SaveClaim(newClaim) 'InsertOnSubmit/SaveChanges etc...
 End Using

必须关注如何建立关系以及如何添加内容。您可能必须使用父表上的主键并链接到子表上的外键 - 我几乎正在做相反的事情。