1

Is it possible to create a one to zero or one relationship in Linq2SQL?

My understanding is that to create a one to one relationship you create a FK relationship on the PK of each table.

But you cannot make the PK nullable, so I don't see how to make a one to zero or one relationship work?

I'm using the designer to automatically create the model - so I would like to know how to set up the SQL tables to induce the relationship - not some custom ORM code.

4

2 回答 2

1

你是部分正确的......但你混合了一些东西。

您不能将主键字段设为空。那部分是正确的。但是持有一->零或一关系的对象上的外键字段可以为空。

在 LINQ to SQL 中,一 -> 零或一关系将只是一个引用另一个 LINQ to SQL 类但允许空值的字段。

示例表

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

使用这些表,您应该从父级到子级得到一个 -> 零或一个,从子级返回到父级的一个 -> 多(一个子级可以有多个父级)。

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

您正在两个表之间创建一个公共主键。如果父项中不存在 PK,您将无法将行插入子项。

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

将为不存在关系的 c.* 返回 NULL。

于 2009-12-17T13:49:24.453 回答