2017-10-15 163 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