2017-10-15 21 views
1

j'ai installé un LINQ to SQL DataContext pour refléter un ensemble de base des relations:entité enfant Populate lors de la création de nouveaux parents dans LINQ to SQL

Un rendez-vous a un client, un employé et de nombreux AppointmentServices. Chaque AppointmentService a une définition de service. Chacun est lié à l'autre par une clé primaire et étrangère.

LINQ to SQL relationships

créer un nouveau rendez-vous dans la mémoire, et remplir le clientID employeeID. Je crée un AppService en mémoire et ajoute le AppService à l'ensemble d'entités dans tmpAppointment.AppServices.

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

tmpAppService = New AppService 
tmpAppService.ServiceDefinitionID = 123 

tmpAppointment.AppServices.Add(tmpAppService) 

Est-il possible de remplir le ServiceDefinition de chaque AppService en mémoire sans insérer soit la nomination ou le service d'application dans leurs bases de données respectives? L'utilisateur peut annuler ce processus et je voulais simplement éviter d'ajouter puis de supprimer de la base de données inutilement.

Je pourrais tout remonter après avoir confirmé que l'utilisateur voulait aller de l'avant en utilisant des contrôles non liés, mais je me demandais si LINQ to SQL fournit une solution plus élégante.

J'ai essayé:

tmpAppointment.AppServices.Load

et

la création d'un new ServiceDefinition puis peuplant puis l'ajouter à AppServices

et

sélection de la ServiceDefinition correcte de la DB et en l'ajoutant à l'ensemble d'entités AppServices

Le premier ne fait rien et les deux derniers jeter la suivante à partir de l'intérieur de la classe DataContext:

System.InvalidOperationException: « Sequence contient plus d'un élément »

à la ligne généré automatiquement

<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 

Merci.

Répondre

0

Au lieu d'associer l'ID, vous devez affecter l'entité entière.

tmpAppService.ServiceDefinitionID = 123 

devient

tmpAppSerice.ServiceDefinition = someServiceDefinition 

De cette façon, tout sera inséré en même temps et LINQ-2-sql gère le réglage et l'affectation des

+0

de la carte d'identité appropriée Merci, faisant cependant donc jette l'erreur que j'ai mentionnée. J'ai mis à jour ma question avec plus de détails sur ce front. – George

+0

J'ai résolu mon problème de lancement d'erreur. Une fois cela fait, j'étais autorisé à remplir manuellement l'entité ServiceDefinition. Je vous remercie. LINQ to SQL fonctionne comme vous le souhaitez, mais vos associations doivent être correctement configurées. Une fois que j'ai changé mes relations Parent/Enfant pour être fondamentalement le contraire de ce que j'avais à l'origine (schéma de ref en haut), les choses ont commencé à fonctionner correctement - c'est drôle! – George