EntityCollections, устанавливающий EntityReference.EntityKey для заполнения Коллекции - PullRequest
1 голос
/ 09 марта 2010

Проблемы с Entity Framework. Я заполнял EntityReferences с помощью EntityKey, чтобы избавить от необходимости запрашивать базу данных каждый раз, когда я добавляю Entity Reference. Теперь я хочу сделать то же самое для Ассоциации (EntityCollection), но я не уверен, с чего начать. ниже приведены детали того, что я пытаюсь сделать

Таблица

CREATE TABLE [dbo].[Foo](
 [FooId] [int] IDENTITY(1,1) NOT NULL,
 [FooName] [nvarchar](50) NOT NULL,
)
CREATE TABLE [dbo].[Bar](
 [BarId] [int] IDENTITY(1,1) NOT NULL,
 [BarName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Bar] PRIMARY KEY CLUSTERED 
)
CREATE TABLE [dbo].[FooBar](
 [FooId] [int] NOT NULL,
 [BarId] [int] NOT NULL,
 CONSTRAINT [PK_FooBar] PRIMARY KEY CLUSTERED 
)
ALTER TABLE [dbo].[FooBar]  WITH CHECK ADD  CONSTRAINT [FK_FooBar_Bar] FOREIGN KEY([BarId])
REFERENCES [dbo].[Bar] ([BarId])

ALTER TABLE [dbo].[FooBar] CHECK CONSTRAINT [FK_FooBar_Bar]

ALTER TABLE [dbo].[FooBar]  WITH CHECK ADD  CONSTRAINT [FK_FooBar_Foo] FOREIGN KEY([FooId])
REFERENCES [dbo].[Foo] ([FooId])

ALTER TABLE [dbo].[FooBar] CHECK CONSTRAINT [FK_FooBar_Foo]

Теперь, когда я сопоставляю это с EntityFramework, я получаю 2 сущности (Foo и Bar) с отношением «многие ко многим».

То, что я пытаюсь сделать, это добавить новую сущность Foo с 5 связанными барами У меня есть идентификаторы баров, но я не хочу запрашивать базу данных, чтобы получить все 5 баров. Я бы предпочел просто установить entityKey.

Возможно ли это?

например:

Foo myFoo = new Foo();
Foo.Name = "Hello"
Foo.Bars = // now I would like to just populate a set of EntityKeys for the EntityCollection

Ответы [ 2 ]

1 голос
/ 09 марта 2010

Просто прикрепите заглушку :

var bar = new Bar { Id = barId };
Context.AttachTo("Bars", bar);
myFoo.Bars.Add(bar);
Context.SaveChanges();

Нет запроса к базе данных для bar.

Важно: Вы должны прикрепить bar до , добавив отношение к myFoo, чтобы EF знал, что вы не пытаетесь вставить новый Bar.

0 голосов
/ 09 марта 2010

Я не думаю, что вы можете просто установить EntityKey в этом случае, потому что соединение FooBar является (или должно быть) сущностью к себе. Вы должны создать новый FooBar для каждого отношения «многие ко многим», которое вы хотите создать между Foos и Bars.

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