2017-10-15 1 views
1

Ich habe Setup eine LINQ to SQL Datacontext eine Reihe von grundlegenden Beziehungen zu reflektieren:Populate Kind Entität, wenn neue Eltern in LINQ to SQL Erstellen

Ein Termin hat ein Kunde, ein Mitarbeiter und viele AppointmentServices. Jeder AppointmentService hat eine ServiceDefinition. Jeder ist mit dem anderen durch einen Primär- und einen Fremdschlüssel verbunden.

LINQ to SQL relationships

ich einen neuen Termin im Speicher zu erstellen, die clientID und employeeID bevölkert. Ich erstelle einen AppService im Speicher und füge den AppService zu der in tmpAppointment.AppServices festgelegten Entität hinzu.

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

tmpAppService = New AppService 
tmpAppService.ServiceDefinitionID = 123 

tmpAppointment.AppServices.Add(tmpAppService) 

Ist es möglich, die ServiceDefinition jeden AppService im Speicher zu füllen ohne entweder den Termin oder den App-Dienst in ihre jeweiligen Datenbanken eingefügt? Der Benutzer kann diesen Vorgang abbrechen, und ich wollte einfach vermeiden, dass er unnötigerweise aus der Datenbank löscht.

Ich könnte all dies nach Bestätigung des Benutzers mit ungebundenen Steuerelementen weitermachen wollen, aber ich fragte mich, ob LINQ to SQL eine elegantere Lösung bietet.

I haben versucht:

tmpAppointment.AppServices.Load

und

eine new ServiceDefinition Schaffung dann Bestücken und Hinzufügen dann AppServices

und

die korrekte ServiceDefinition aus der DB Auswahl und Hinzufügen zu dem AppServices-Entitätsset

Die erste tut nichts, und die beiden letzteren die folgenden aus der Klasse Datacontext Wurf:

System.InvalidOperationException: ‚Sequenz mehr als ein Element enthält‘

an der automatisch generierte Linie

<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 

Vielen Dank.

Antwort

0

Anstatt die ID zu übernehmen, müssen Sie die gesamte Entität zuweisen.

tmpAppService.ServiceDefinitionID = 123 

wird

tmpAppSerice.ServiceDefinition = someServiceDefinition 

Auf diese Weise wird es alle zur gleichen Zeit und Linq-2-SQL-Griffe

+0

ist die Einstellung und Zuordnung der richtigen ID eingefügt werden Danke, aber tun so wirft den Fehler, den ich erwähnt habe. Ich habe meine Frage mit mehr Details auf dieser Vorderseite aktualisiert. – George

+0

Ich habe mein Fehler werfen Problem gelöst. Sobald ich das getan hatte, durfte ich die Entität ServiceDefinition manuell füllen. Vielen Dank. Für alle anderen, die dieses Problem haben, funktioniert LINQ to SQL so, wie Sie es erwarten, aber Sie müssen Ihre Assoziationen korrekt eingerichtet haben. Sobald ich meine Eltern/Kind-Beziehungen geändert habe, um im Grunde das Gegenteil von dem zu sein, was ich ursprünglich hatte (ref Diagramm an der Spitze), begannen die Dinge richtig zu funktionieren - lustig, dass! – George