代码之家  ›  专栏  ›  技术社区  ›  John Hartsock

EntityCollections设置EntityReference.EntityKey以填充集合

  •  1
  • John Hartsock  · 技术社区  · 14 年前

    实体框架有问题。我一直在用EntityKey填充EntityReferences,以消除在每次添加实体引用时查询数据库的需要。现在我想为一个关联(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
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Craig Stuntz    14 年前

    只需附加一个 stub entity :

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

    没有数据库查询 bar .

    重要提示: 你必须附加 酒吧 之前 将关系添加到 myFoo 以便英足联知道你不想插入新的 Bar .

        2
  •  0
  •   Dave Swersky    14 年前

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