2009-12-17 4 views
1

Est-il possible de créer une relation un à zéro ou une relation dans Linq2SQL? Je comprends que pour créer une relation un à un, vous créez une relation FK sur le PK de chaque table.Linq 2 SQL Un à zéro ou Une relation possible?

Mais vous ne pouvez pas rendre le PK nullable, donc je ne vois pas comment faire un un à zéro ou une relation de travail? J'utilise le concepteur pour créer automatiquement le modèle - donc je voudrais savoir comment configurer les tables SQL pour induire la relation - pas un code ORM personnalisé.

Répondre

1

Vous avez partiellement raison ... mais vous mélangez un peu les choses.

Vous ne pouvez pas rendre un champ de clé primaire nul. Cette partie est correcte. Mais le champ de clé étrangère sur l'objet contenant la relation un -> zéro ou un peut être nul.

Dans LINQ to SQL, la relation un -> zéro ou un sera simplement un champ qui référence une autre classe LINQ to SQL mais autorise les valeurs nulles.

Tableaux Exemple

create table Child (
    id int identity(1,1), 
    name varchar(max), 
    primary key (id)) 

create table Parent (
    id int identity(1,1), 
    childId int, 
    name varchar(max), 
    primary key (id), 
    foreign key (childId) references Child(id)) 

En utilisant ces tables, vous devriez obtenir un -> zéro ou un de parent à l'enfant et un -> beaucoup de dos enfant au parent (un enfant peut avoir de nombreux Parents).

+0

"Dans LINQ to SQL, la relation un -> zéro ou un sera simplement un champ qui référence une autre classe LINQ to SQL mais autorise les valeurs nulles." Comment modéliser cela dans la base de données? Si je crée une colonne qui autorise les valeurs NULL et que je l'utilise comme FK, j'obtiens une relation un à plusieurs - même si je mets une contrainte unique sur cette colonne. –

0

Si vous êtes désireux Z cardinalité, essayer quelque chose comme:

CREATE TABLE parent (id INTEGER NOT NULL PRIMARY KEY); 
CREATE TABLE child (id INTEGER NOT NULL PRIMARY KEY REFERENCES parent (id)); 

Vous créez une clé primaire commune entre les deux tables. Vous ne pourrez pas insérer des lignes dans l'enfant si le PK n'existe pas dans le parent.

SELECT p.*, c.* FROM parent p LEFT JOIN child c ON c.id=p.id 

retournera NULL pour c. * Où aucune relation n'existe.

Questions connexes