Linq 2 SQL От одного до нуля или одно отношение возможно? - PullRequest
1 голос
/ 17 декабря 2009

Возможно ли создать отношение "один к нулю" или одно в Linq2SQL?

Насколько я понимаю, чтобы создать отношение один к одному, вы создаете отношение FK на ПК каждой таблицы.

Но вы не можете сделать PK обнуляемым, поэтому я не вижу, как заставить один к нулю или одно отношение работать?

Я использую конструктор для автоматического создания модели - поэтому я хотел бы знать, как настроить таблицы SQL, чтобы вызвать взаимосвязь, а не какой-либо специальный код ORM.

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Вы частично правы ... но вы немного смешиваете.

Нельзя сделать поле первичного ключа пустым. Эта часть верна. Но поле внешнего ключа для объекта, содержащего отношение «один -> ноль» или «одно», МОЖЕТ быть нулевым.

В LINQ to SQL отношение один -> ноль или одно будет просто полем, которое ссылается на другой класс 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))

Используя эти таблицы, вы должны получить единицу -> ноль или единицу от Родителя до Ребенка и одну -> много от Ребенка до Родителя (у одного ребенка может быть много родителей).

0 голосов
/ 17 декабря 2009

Если вы хотите 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

вернет NULL для c. *, Если отношения не существуют.

...