Linq to SQL 添加带有子对象的对象

Linq to SQL Add object with child objects

我有一个 table "Claim" 连接到 "MobClaim"。一个 "Claim" 可以有 0 个或 1 个 "MobClaims"。我似乎无法弄清楚如何插入 "Claim",同时使用 Linq 将 "MobClaim" 插入到 SQL。

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

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

先插入主键记录,然后将另一条记录的外键设置为自动生成的主键。

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

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

我想做的是:

使用 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

它必须是关于如何建立关系以及如何添加内容的。您可能必须将父 table 和 link 上的主键用于子 table 上的外键 - 我几乎做了相反的事情。