Linq 2 SQL One to Zero或One关系可能吗?

时间:2009-12-17 13:28:41

标签: linq-to-sql one-to-one

是否可以在Linq2SQL中创建一对一或一对一的关系?

我的理解是,要创建一对一的关系,您需要在每个表的PK上创建一个FK关系。

但是你不能让PK可以为空,所以我不知道如何让一个零或一个关系工作?

我正在使用设计器自动创建模型 - 所以我想知道如何设置SQL表来引发关系 - 而不是一些自定义ORM代码。

2 个答案:

答案 0 :(得分:1)

你是部分正确的......但你的混合事情有点。

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

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

使用这些表,你应该得到一个 - >零或一个从父母到孩子和一个 - >很多从孩子回到父母(一个孩子可以有很多父母)。

答案 1 :(得分: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,其中不存在任何关系。