EntityCollections设置EntityReference.EntityKey以填充Collection

时间:2010-03-09 16:42:57

标签: c# entity-framework

遇到实体框架问题。我一直在用EntityKey填充EntityReferences,以便在我添加实体引用时不再需要查询数据库。现在我想为一个Association(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个Bars 我有条形码的ID,但我不想查询数据库以获得所有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 个答案:

答案 0 :(得分:1)

只需附上stub entity

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

bar没有数据库查询。

重要提示:在将关系添加到bar之前,您必须附加myFoo ,以便EF知道您没有尝试插入一个新的Bar

答案 1 :(得分:0)

在这种情况下,我认为你不能只设置一个EntityKey,因为FooBar连接本身就是(或应该是)一个实体。您必须为要在Foos和Bars之间创建的每个多对多关系创建一个新的FooBar。