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

无主键的Linq插入

  •  7
  • betitall  · 技术社区  · 17 年前

    我需要使用LINQ to SQL将记录插入到没有主键的表中。这张桌子设计得很差;我无法控制桌子的结构。该表由几个varchar字段、一个文本字段和一个时间戳组成。它被用作其他实体的审计跟踪。

    完成插入的最佳方法是什么?我可以扩展此表的Linq分部类并添加一个“假”键吗?我对任何黑客行为都持开放态度,无论多么笨拙。

    4 回复  |  直到 17 年前
        1
  •  11
  •   Jonathan Allen    17 年前

    LINQ to SQL不适用于此任务,因此不要使用它。只需将插入扭曲到存储过程中,并将该过程添加到数据模型中即可。如果你不能做到这一点,那就编写一个带有一点内联SQL的普通函数。

        2
  •  9
  •   TheSmurf    17 年前

    在设计器中打开DBML文件,并为映射提供一个键,无论数据库是否有键。这将解决你的问题。但是,请注意,如果数据库中没有真正的密钥,则不能指望该列用于身份或其他任何目的。

        3
  •  3
  •   Rashmi Pandit    15 年前

    我能够使用复合密钥解决这个问题。

    对于只包含两列的表,我也遇到了类似的问题:用户名、角色。 此表显然不需要标识列。因此,我创建了一个包含用户名和角色的复合密钥。这使我能够使用LINQ添加和删除条目。

        4
  •  2
  •   Amy B    17 年前

    您可以使用 DataContext.ExecuteCommand 方法来运行您自己的自定义插入语句。

    或者,您可以添加 primary key 对于列,这将允许 objects to be tracked 用于通过数据上下文进行插入/更新/删除。即使列不是数据库中的强制主键,这也会起作用(linq怎么知道?)。如果你只做插入,从不在同一个数据上下文中重用主键值,你会没事的。