1

Linq2SQL で 1 対 0 または 1 の関係を作成することは可能ですか?

私の理解では、1 対 1 の関係を作成するには、各テーブルの PK で FK 関係を作成します。

しかし、PK を null 可能にすることはできないため、1 対 0 または 1 の関係を機能させる方法がわかりません。

私はデザイナーを使用してモデルを自動的に作成しています。そのため、カスタム ORM コードではなく、SQL テーブルを設定して関係を誘導する方法を知りたいと思います。

4

2 に答える 2

1

あなたは部分的に正しいです...しかし、あなたの混合物は少しです。

主キー フィールドを null にすることはできません。その部分は正しいです。ただし、1 -> 0 または 1 の関係を保持するオブジェクトの外部キー フィールドは null になる可能性があります。

LINQ to SQL では、one -> zero または one の関係は、別の 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))

これらのテーブルを使用して、親から子への 1 -> ゼロまたは 1 つと、子から親への 1 -> 多を取得する必要があります (1 つの子は複数の親を持つことができます)。

于 2009-12-17T13:35:00.783 に答える
0

Z カーディナリティが必要な場合は、次のようにしてください。

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

2 つのテーブル間に共通の主キーを作成しています。PK が親に存在しない場合、子に行を挿入することはできません。

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

関係が存在しない c.* に対しては NULL を返します。

于 2009-12-17T13:49:24.453 に答える