2008-12-14 10 views
3

En essayant d'utiliser LINQ to SQL, j'ai rencontré plusieurs problèmes.LINQ to SQL

J'ai des personnes de table:

  • int ID
  • chaîne
  • prenom
  • chaîne lastName

et des notes de table qui a:

  • int ID
  • chaîne
  • NoteText
  • chaîne CreatedBy
  • datetime creationDate
  • int PersonID

PersonID est une clé étrangère et la relation est 1: n

j'ai essayé d'utiliser LINQ to SQL pour créer une personne et quelques notes pour chaque personne.

Person person = new person(); 
Person.firstName = "me"; 
Person.note = new note(); 
Person.note.noteText = "some text…"; 

_DataContext.Persons.InsertOnSubmit(person); 
_DataContext.SubmitChanges(); 

Le problème est que l'objet personne n'existe pas encore dans la base de données, donc il n'a pas encore d'ID. Donc le note.personID filed a une valeur 0 ... (le champ ID est un champ d'identité dans le serveur sql)

La seule solution pour cela que j'ai trouvé est de créer une personne, soumettre des modifications et ensuite créer une note et soumettre des changements encore. Est-ce qu'il me manque quelque chose ici ou peut-être que c'est comme ça qu'on devrait travailler avec LINQ to SQL?

Comment puis-je ajouter plusieurs notes par personne avec LTS? J'ai une relation 1: n et je ne le vois pas avec LTS.

Si une personne a 10000 notes, je ne veux pas que le constructeur de l'objet personne charge toutes les notes qu'il a. Je veux les charger seulement quand je me réfère à eux. Comment puis-je configurer LTS pour charger les notes à la demande?

+0

est votre PersonID une clé étrangère sur la table des notes? Si oui, il devrait être géré automatiquement comme vous le souhaitez – JohnIdol

+0

Question très bien écrite! +1 –

Répondre

3

Si vous n'utilisez pas le concepteur de classe LinqToSql, vous devriez penser à l'utiliser. Les classes qu'il génère prendront en charge le scénario d'insertion que vous avez décrit.

Je peux dire que vous n'utilisez pas le concepteur car il vous donnerait une propriété Notes (pluriel) sur la personne ... comme personne est 1 à plusieurs avec des notes.

Comment puis-je configurer LTS pour charger les notes à la demande?

Le concepteur générera une propriété de type EntitySet (Note), qui chargera Notes à la demande.

+0

Eh bien, en fait, j'utilise le concepteur, j'ai juste ajouté mes tables avec les relations de la DB et cela ne fonctionne pas comme vous l'avez décrit. peut-être que je devrais configurer quelque chose pour changer la façon dont cela fonctionne? J'ai configuré la relation pour être de 1 à plusieurs et toujours pas de collection de notes ou quelque chose ... – Omri

+0

Hmm. D'accord. Voici le blog de Scott Guthrie sur le designer. http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx Il montre le scénario d'insertion que vous décrivez. Vérifiez les propriétés de la relation pour vous assurer que c'est Person.Id to Note.PersonId –

+0

Yep a trouvé le problème, la relation n'a pas été configurée correctement sur le serveur SQL. maintenant tout fonctionne très bien. Merci beaucoup. Omri. – Omri