Entity Framework - отношение 1 к 1, где один конец не является первичным ключом - PullRequest
0 голосов
/ 20 декабря 2010

Я хотел бы определить отношение в модели данных Entity Framework, которое является однозначным, один конец которого является первичным ключом одной таблицы, а другой конец - внешним ключом другого.Например:

table: aspnet_Users
w/ col: UserId guid Primary Key

со свойством UserId таблицы aspnet_Users, связанной со столбцом AspUserId таблицы User:

table: User
w /col: UserId int Primary Key
w /col: AspUserId guid

Когда я пытаюсь это сделать, я получаю сообщение об ошибкечто, поскольку поле AspUserId не является первичным ключом его таблицы, оно не будет работать:

Ошибка 21 Ошибка 113: множественность недопустима в роли «Пользователь» в отношении «FK_User_aspnet_Users».Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть *.

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

Внешние ключи необходимо сопоставить с первичными ключами.В противном случае могут произойти следующие записи:

aspnet_Users
UserId 
11111111
11111111
22222222

User
UserId AspUserId
1      11111111
2      11111111

И это не имеет смысла - и нарушает вашу 1-1 кардинальность.

Однако - это сказанное (глядя на старое членствоdb - yuck), поле UserId на dbo.aspnet_Users является первичным ключом.

Вы уверены, что у вас есть внешний ключ на правильной таблице?Имеет ли dbo.aspnet_Users в вашей базе данных PK для UserId.

Кроме того - старайтесь не отображать таблицы членства - это будет болезненным миром.Отношения в схеме членства очень сложные .

Просто сопоставьте свою собственную таблицу User.Хорошо иметь FK для работы на стороне базы данных (аудит, хранимые процедуры, триггеры и т. Д.).

Но со стороны модели - вы должны взаимодействовать с вашей сущностью User через EF и с aspnet_Users (Membership) через API поставщика членства.

Если вам нужно «соединить их» в своем коде (часто это так), то включите его в службу.

0 голосов
/ 20 декабря 2010

В ответ на постер Таблица пользователей:

CREATE TABLE [dbo].[User](
    [UserId] [int] IDENTITY(1,1) NOT NULL,
    [AspUserId] [uniqueidentifier] NOT NULL,
    [ModifiedDate] [datetime] NOT NULL,
    [CreatedDate] [datetime] NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
    [UserId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_aspnet_Users] FOREIGN     KEY([AspUserId])
REFERENCES [dbo].[aspnet_Users] ([UserId])
GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_aspnet_Users]
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...