代码之家  ›  专栏  ›  技术社区  ›  tster

实体框架-添加到仅具有外键值的联接

  •  3
  • tster  · 技术社区  · 14 年前

    好的,我有三张桌子,叫它们:

    • 类型属性
    • 名字

    商场

    • 存储ID
    • 名字

    个人存储

    • 类型属性
    • 存储ID

    现在,我有了一个表单,允许您向一个人添加商店。但是,我正在从表单中获取商店ID。我真的不想通过查询从实体框架中获取存储对象。我只想使用storeid和我拥有的person对象添加到表中。

    1 回复  |  直到 12 年前
        1
  •  5
  •   tster    14 年前

    默认情况下,在ef中,此联接表不会显示为实体,而是显示为多对多关系,该关系将显示为两个导航属性。

    Person.Stores
    Store.People
    

    如果您希望在不检索实体的情况下建立多对多关系,那么附加存根实体是最好的方法。

    var person = // you already have the person
    var store = new Store{StoreID = 5} // you know the storeID
    
    ctx.AttachTo("Stores", store);
    ctx.AttachTo("People", person); // assuming the person isn't already attached
    person.Stores.Add(store);
    ctx.SaveChanges();
    

    此代码的唯一问题是,如果关系已经存在,它将失败,因此需要确保正在创建 新的 关系

    有关使用类似于此的存根实体的更多信息,请签出 my post . 希望这有帮助。

    亚历克斯

    从操作编辑:

    由于我使用的是EF4,所以我使用以下代码从附件中删除字符串(这要归功于链接中的提示13)。

    var person = // you already have the person
    var store = new Store{StoreID = 5} // you know the storeID
    
    ctx.Stores.Attach(store);
    person.Stores.Add(store);
    ctx.SaveChanges();