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 上的外键 - 我几乎做了相反的事情。
我有一个 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 上的外键 - 我几乎做了相反的事情。