2017-10-15 165 views
1

我已经建立了的LINQ to SQL的DataContext,以反映基本关系的集合:在LINQ创造新父当填充子实体到SQL

的委任有一个客户端,一个员工和许多AppointmentServices。每个AppointmentService都有一个ServiceDefinition。每个通过主键和外键链接到另一个键。

LINQ to SQL relationships

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

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

tmpAppService = New AppService 
tmpAppService.ServiceDefinitionID = 123 

tmpAppointment.AppServices.Add(tmpAppService) 

是否有可能来填充存储器中的每一AppService服务的服务定义不插入任何任命或应用服务为各自的数据库?用户可以取消这个过程,我只是想避免不必要的添加,然后从数据库中删除。

确认用户想要使用未绑定控件继续前进,我可以开球了,但我想知道LINQ to SQL是否提供了更优雅的解决方案。

我曾尝试:

tmpAppointment.AppServices.Load

创建new ServiceDefinition然后填充它,然后将其添加到AppServices

从数据库中选择正确的服务定义并将其添加到AppServices实体集

第一不执行任何操作,后两个抛从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 

谢谢。

回答

0

您不需要分配ID,而需要分配整个实体。

tmpAppService.ServiceDefinitionID = 123 

成为

tmpAppSerice.ServiceDefinition = someServiceDefinition 

这样一来,它都将在同一时间插入和LINQ-2-SQL处理的设置和分配正确的ID的

+0

谢谢你,但是做所以抛出我提到的错误。我已经更新了关于这方面的更多细节。 – George

+0

我解决了我的错误抛出问题。一旦我这样做了,我可以手动填充ServiceDefinition实体。谢谢。对于任何有此问题的人来说,LINQ to SQL的确如你所期望的那样工作,但你需要正确设置你的关联。一旦我改变了我的父母/子女关系,基本上和我原来的父母/子女关系相反(参见顶部的图表),事情就开始正常工作 - 这很有趣! – George