Создание отношений один-к-одному - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть два объекта: пресс и строчка:

Press
------------------
PressID
Name

Stitching
------------------
StitchingID
Name
Cost

Итак, на моем сайте, когда пользователь создает пресс, у него есть возможность создать шов для этой прессы. Пресс не должен шить.

Я использую Entity Framework 4, и если я получу объект Press из базы данных, я бы хотел сказать:

Press p = getPressFromDB(pressId);
if (p.Stitching != null)
{
    float cost = p.Stitching.Cost;
}

И я бы тоже хотел иметь возможность:

Stitching s = getStitchingFromDB(stitchingId);
Press p = s.Press;

Как я могу создать отношение один к одному между этими двумя таблицами?

EDIT:

Я последовал совету пользователя на другом форуме и запустил этот скрипт, чтобы создать взаимосвязь между ними и предотвратить связывание швов с несколькими прессами:

CREATE TABLE PressStitching (PressID int NOT NULL PRIMARY KEY, StitchingID int NOT NULL,
CONSTRAINT FK_PressStitching_Press FOREIGN KEY(PressID) REFERENCES Press(PressID),
CONSTRAINT FK_PressStitching_Stitching FOREIGN KEY(StitchingID) REFERENCES Stitching(StitchingID),
CONSTRAINT UNQ_Stitching UNIQUE(StitchingID))

Но когда я обновляю свой файл .edmx, я все равно получаю отношение один ко многим. Пресс имеет одну строчку, но строчка имеет несколько сущностей пресса. Я обновил отношения в конструкторе .edmx так, чтобы у Press была Zero-or-One of Stitching, а у Stitching было One of Equipment. Но я не знаю, достаточно ли этого. Любой совет здесь?

Ответы [ 3 ]

0 голосов
/ 20 апреля 2011

Я думаю, что StitchingID должно быть Primary Key, а также Foreign Key до PressID

0 голосов
/ 13 мая 2011

Я не понимаю, зачем вообще нужен StichingID, если только Stichings не может быть связан с другими вещами, кроме прессов. Если это то, что вы говорите, и может быть одно или ноль стежков для каждого нажатия, тогда таблица стежков должна действовать как таблица дополнений для прессов. Вместо использования StichingID у первичного ключа в таблице Stiching должен быть PressID. Таким образом, соотношение 1: 0-1 обеспечивается напрямую. Я полагаю, что Entity Framework не должно быть проблем с распознаванием этого.

0 голосов
/ 20 апреля 2011

Если отношение между Press и Stitching является взаимно-однозначным, и нет никакой причины иметь Stitching в отдельной таблице (т. Е. Stitching ассоциируется только с Press и никаким другим классом), тогда было бы лучше перенести Stitching атрибуты в прессе

PressID
Name 
StitchingName
StitchingCost

Это значительно упрощает дизайн модели и корректно нормализует базу данных.

В .net я бы сделал StitchingCost и обнуляемый тип. то есть. float? StitchingCost;

Это позволит вам проверить, были ли добавлены детали вышивания.

Пример:

Press p = getPressFromDB(pressId);
if (p.StitchingCost.HasValue)
{
    float cost = p.StitchingCost.Value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...