Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityCollections设置EntityReference.EntityKey以填充集合_C#_Entity Framework - Fatal编程技术网

C# EntityCollections设置EntityReference.EntityKey以填充集合

C# EntityCollections设置EntityReference.EntityKey以填充集合,c#,entity-framework,C#,Entity Framework,实体框架有问题。我一直在用EntityKey填充EntityReference,以消除每次添加实体引用时查询数据库的需要。现在我想对一个关联(EntityCollection)做同样的事情,但我不确定从哪里开始。下面是我尝试做的细节 桌子 CREATE TABLE [dbo].[Foo]( [FooId] [int] IDENTITY(1,1) NOT NULL, [FooName] [nvarchar](50) NOT NULL, ) CREATE TABLE [dbo].[Bar](

实体框架有问题。我一直在用EntityKey填充EntityReference,以消除每次添加实体引用时查询数据库的需要。现在我想对一个关联(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时,我得到了两个具有多对多关系的实体(Foo和Bar)

我想做的是添加一个新的Foo实体,其中有5个相关条 我有酒吧的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

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

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

只需附加一个:

没有针对
条的DB查询

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

只需附加一个:

没有针对
条的DB查询


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

Craig,使用存根实体似乎比填充EntityKey更好,也比再次查询数据库要好得多。这是真的吗?视情况而定。在EF4中,我可能会使用FK关联。在EF 1中,存根实体可能比设置
EntityKey
更好,但需要(可能是间接)访问上下文。Craig,使用存根实体似乎比填充EntityKey更好,也比再次查询数据库要好得多。这是真的吗?视情况而定。在EF4中,我可能会使用FK关联。在EF 1中,存根实体可能比设置
EntityKey
更好,但需要(可能是间接)访问上下文。
var bar = new Bar { Id = barId };
Context.AttachTo("Bars", bar);
myFoo.Bars.Add(bar);
Context.SaveChanges();