是否可以在Linq2SQL中创建一对一或一对一的关系?
我的理解是,要创建一对一的关系,您需要在每个表的PK上创建一个FK关系。
但是你不能让PK可以为空,所以我不知道如何让一个零或一个关系工作?
我正在使用设计器自动创建模型 - 所以我想知道如何设置SQL表来引发关系 - 而不是一些自定义ORM代码。
答案 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,其中不存在任何关系。