Базовый SQL / Entity Framework от 1 до 0..1 вопрос об объектной модели - PullRequest
0 голосов
/ 26 марта 2009

В моей базе данных есть 2 таблицы A и B

.

A имеет идентификатор столбца, заголовок и B_ID. B_ID допускает нулевые значения. B имеет столбцы ID и SomeText Идентификатор в обоих идентификаторах первичного ключа А также имеет уникальный индекс на B_ID

Это выглядит как основной способ сказать, что A может иметь 0 или 1 B строк, связанных с ним, и каждый B связан ровно с 1 A. Это верно до сих пор?

Когда я создаю объектную модель ADO.NET Entity Framework для этой базы данных, A имеет свойство навигации к B, которое имеет кратность 0..1. Это имеет смысл.

Сущность B имеет свойство навигации к A, но кратность этого равна * (Многие).

Полагаю, определение моей базы данных не позволит связать один B со многими A, так что, возможно, это не проблема, но есть ли способ определить базу данных и / или изменить модель сущности, чтобы свойство навигации из B к А имеет кратность 1?

Ответы [ 3 ]

1 голос
/ 26 марта 2009

Я не полностью понимаю вашу настройку сущности, но если у B есть первичный ключ, который включает в себя и значение ID, и любое другое поле, или вообще нет связи с первичным ключом, то это отношение корректно, поскольку Entity Framework отображает его. Вы можете дважды проверить свою схему, чтобы убедиться, что все настроено так, как вы считаете.

Чтобы иметь кратность 1 от B до A, вам потребуется первичный ключ в B, который является исключительно значением идентификатора, который используется в качестве внешнего ключа в A.

Если мое толкование вашей структуры сущностей неверно, уточните ваш вопрос, и я постараюсь помочь вам в дальнейшем.

0 голосов
/ 26 марта 2009

Звучит так, как будто вы должны опустить идентификатор B в таблице A (совпадает ли он с идентификатором A ??). Вы делаете что-то подобное?

CREATE TABLE dbo.People(PersonId int NOT NULL, Name varchar(50) NOT NULL)
CREATE TABLE dbo.BioData(PersonId int NOT NULL, ExtraInfo varchar(255) NOT NULL)
0 голосов
/ 26 марта 2009

Спасибо, Мвигдал, ответ был на самом деле в определении базы данных.

Я изменил определения таблиц. Таблица A имеет столбцы ID, B_ID и Название В таблице B есть столбцы A_ID и SomeText

ID - это первичный ключ таблицы A A_ID является первичным ключом таблицы B B_ID в таблице A является ссылкой внешнего ключа на столбец A_ID в таблице B

Когда я создаю Entity Framework Model из этого определения базы данных, я получаю ожидаемое соотношение от 1 до 0..1 между A и B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...