Как я могу получить доступ к данным из моей распределительной таблицы?
Я создал соединительную таблицу между двумя моими таблицами, чтобы создать взаимосвязь между ними. Я могу сохранять в них данные, но не могу снова получить к ним доступ. Это написано в MVC ASP.NET, кстати.
Мой первый стол:
CREATE TABLE [dbo].[UserInfo] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (50) NULL,
[LastName] NVARCHAR (50) NULL,
[Email] NVARCHAR (256) NOT NULL,
[Image] VARBINARY (MAX) NULL,
[Approved] BIT NOT NULL,
[Color] NVARCHAR (10) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Мой второй стол:
CREATE TABLE [dbo].[Events] (
[Id] NVARCHAR (128) NOT NULL,
[Name] NVARCHAR (100) NOT NULL,
[StartDate] DATETIME NULL,
[EndDate] DATETIME NULL,
[Approved] BIT NOT NULL,
[room_id] INT NULL,
[color] NVARCHAR (10) NOT NULL,
[Owner] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Events_Rooms] FOREIGN KEY ([room_id]) REFERENCES [dbo].[Rooms] ([_key])
);
Мой соединительный стол:
CREATE TABLE [dbo].[UserToEvent] (
[UserId] INT NOT NULL,
[EventId] NVARCHAR (128) NOT NULL,
CONSTRAINT [UserId_EventId_pk] PRIMARY KEY CLUSTERED ([UserId] ASC, [EventId] ASC),
CONSTRAINT [FK_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[UserInfo] ([Id]),
CONSTRAINT [FK_Event] FOREIGN KEY ([EventId]) REFERENCES [dbo].[Events] ([Id])
);
Код для добавления новых отношений:
Event e = await db.Events.FindAsync(id);
string email = User.Identity.Name;
UserInfo user = db.UserInfoes.Where(x => x.Email == email).First();
user.Events.Add(e);
e.UserInfoes.Add(user);
db.Entry(user).State = EntityState.Modified;
db.Entry(e).State = EntityState.Modified;
await db.SaveChangesAsync();
Код для доступа к отношениям:
UserInfo user = await db.UserInfoes.FindAsync(id);
List<Events> events = user.Events;
Я ожидал бы, что события будут заполнены всеми событиями, связанными с пользователем, но у него никогда не будет никаких событий.
1 ответ
Я нашел обходной путь, который достаточен для моих потребностей. Я добавил еще один атрибут в свою таблицу соединений, что позволило мне получить к нему доступ в моих контроллерах (поскольку не было только двух первичных ключей). Отсюда я смог собрать данные, как и любую другую таблицу. Не уверен, почему вышеуказанный метод не работает, однако. Я использовал этот метод раньше без заминок. Если у кого-нибудь есть ответ, я бы с удовольствием его услышал.