Vb.net 在LINQ to SQL中创建新父实体时填充子实体

Vb.net 在LINQ to SQL中创建新父实体时填充子实体,vb.net,linq-to-sql,Vb.net,Linq To Sql,我已设置LINQ to SQL DataContext以反映一组基本关系: 预约有一个客户、一个员工和多个预约服务。每个AppointmentService都有一个服务定义。每一个都通过主键和外键相互链接 我在内存中创建一个新约会,填充clientID和employeeID。我在内存中创建了一个AppService,并将该AppService添加到tmpaPointment.AppServices中设置的实体中 tmpAppointment = New Appointment tmpAppoi

我已设置LINQ to SQL DataContext以反映一组基本关系:

预约有一个客户、一个员工和多个预约服务。每个AppointmentService都有一个服务定义。每一个都通过主键和外键相互链接

我在内存中创建一个新约会,填充clientID和employeeID。我在内存中创建了一个AppService,并将该AppService添加到tmpaPointment.AppServices中设置的实体中

tmpAppointment = New Appointment
tmpAppointment.ClientID = 1
tmpAppointment.EmployeeID = 2

tmpAppService = New AppService
tmpAppService.ServiceDefinitionID = 123

tmpAppointment.AppServices.Add(tmpAppService)
是否可以在内存中填充每个AppService的ServiceDefinition,而无需将约会或应用程序服务插入各自的数据库?用户可能会取消这个过程,我只是想避免不必要地从数据库中添加然后删除

在确认用户希望继续使用未绑定的控件之后,我可以开始所有这些,但我想知道LINQtoSQL是否提供了一个更优雅的解决方案

我试过:

tmpapoint.AppServices.Load

创建一个
新服务定义
,然后填充它,然后将其添加到AppServices

从DB中选择正确的ServiceDefinition并将其添加到AppServices entityset

第一个不执行任何操作,后两个从DataContext类中抛出以下内容:

System.InvalidOperationException:“序列包含多个元素”

在自动生成的行上

<Global.System.Data.Linq.Mapping.AssociationAttribute _
    (Name:="AppService_ServiceDefinition", Storage:="_AppServices", _
    ThisKey:="ServiceID", OtherKey:="ServiceDefinitionID", _
    IsForeignKey:=true)>

Public Property AppService() As AppService
Get
    Return Me._AppServices.Entity
End Get

Set
    Dim previousValue As AppService = Me._AppServices.Entity <<<< error thrown

公共属性AppService()作为AppService
得到
返回我。\u AppServices.Entity
结束
设置

将以前的值设置为AppService=Me.\u AppServices.Entity而不是分配ID,您需要分配整个实体

tmpAppService.ServiceDefinitionID = 123
变成

tmpAppSerice.ServiceDefinition = someServiceDefinition

这样,它将同时插入,并且linq-2-sql处理正确ID的设置和分配,而不是分配ID,您需要分配整个实体

tmpAppService.ServiceDefinitionID = 123
变成

tmpAppSerice.ServiceDefinition = someServiceDefinition

这样,它将同时插入,linq-2-sql将处理正确ID的设置和分配

谢谢,但是这样做会引发我提到的错误。我更新了我的问题,在这方面有了更多的细节。我解决了我的错误抛出问题。一旦我这样做了,我就可以手动填充ServiceDefinition实体。非常感谢。对于其他任何有此问题的人,LINQtoSQL确实可以像您期望的那样工作,但是您需要正确设置关联。一旦我改变了我的父母/孩子关系,使其与我原来的关系基本相反(见上图),事情就开始正常运转了——真有趣!谢谢,但是这样做会产生我提到的错误。我更新了我的问题,在这方面有了更多的细节。我解决了我的错误抛出问题。一旦我这样做了,我就可以手动填充ServiceDefinition实体。非常感谢。对于其他任何有此问题的人,LINQtoSQL确实可以像您期望的那样工作,但是您需要正确设置关联。一旦我改变了我的父母/孩子关系,使其与我原来的关系基本相反(见上图),事情就开始正常运转了——真有趣!