2009-12-17 4 views
1

Linq2SQL에서 1 대 1 또는 하나의 관계를 만들 수 있습니까?Linq 2 SQL One to Zero 또는 One relationship이 가능합니까?

일대일 관계를 만들려면 각 테이블의 PK에 대해 FK 관계를 만들어야합니다.

하지만 PK를 사용할 수 없도록 만들 수 없으므로 1 대 1 관계를 만드는 방법을 알지 못합니다.

디자이너를 사용하여 모델을 자동으로 생성하므로 SQL 테이블을 설정하여 관계를 유도하는 방법을 알고 싶습니다. 일부 사용자 지정 ORM 코드가 아닙니다.

답변

1

당신은 부분적으로 정확합니다 ...하지만 당신의 믹싱 것.

기본 키 필드를 null로 설정할 수 없습니다. 그 부분은 정확합니다. 그러나 1 -> 0 또는 하나의 관계를 보유하는 오브젝트의 외부 키 필드는 널이 될 수 있습니다.

LINQ to SQL에서 한 -> 0 또는 하나의 관계는 다른 LINQ to SQL 클래스를 참조하지만 null을 허용하는 필드 일뿐입니다.

예 테이블

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)) 

해당 테이블을 사용하여 얻을해야 하나 -> 제로 또는 아동 부모로부터 하나 하나 -> 많은 아이에서 다시 상위에 (한 아이는 많은 수 있습니다 부모님).

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

당신은 두 테이블 사이의 공통 기본 키를 만들 : 당신은 Z 카디널리티을 원하는 경우

+0

"LINQ to SQL에서 한 -> 0 또는 하나의 관계는 다른 LINQ to SQL 클래스를 참조하지만 null을 허용하는 필드 일뿐입니다." 데이터베이스에서 모델을 어떻게 모델링합니까? null을 허용하는 열을 만든 다음 FK로 사용하면 일대 다 관계가 생깁니다. 열에 고유 한 제한 조건을 적용하더라도 마찬가지입니다. –

0

, 뭔가를하려고합니다. 상위에 PK가 없으면 하위 행을 삽입 할 수 없습니다.

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

은 관계가없는 c. *의 경우 NULL을 반환합니다.