【问题标题】:how to insert data in sql table using Linq without seting any primary key in table如何使用Linq在sql表中插入数据而不在表中设置任何主键
【发布时间】:2010-08-02 07:38:19
【问题描述】:

我有一个表,我不想在其中指定任何主键,之后我使用 Linq 在其中插入记录...aahhh...它给出了错误 "无法对 'Table(abc)' 执行创建、更新或删除操作,因为它没有主键"

谁能告诉我如何在不设置主键的情况下插入记录。 顺便说一句,我没有设置任何主键,因为该表将保留大量数据。

【问题讨论】:

  • 我看不到创建主键的问题。对我来说似乎是显而易见的解决方案。
  • 只需创建一个自增的整数字段,并将其设置为主键。
  • Dan..它是每秒 n 英里秒的汽车跟踪记录...你说的是...

标签: c# linq-to-sql


【解决方案1】:

您不能将 Linq-to-SQL 直接用于没有主键的表,因为它不受支持。

如果您担心索引对性能的影响,您可以添加一个执行插入操作的存储过程并将其添加到您的数据上下文中。这需要更多的工作,而且它并不是真正的 Linq-to-SQL,它只是一种您在数据上下文中调用的方法。

无论如何,身份主键字段可能不会对性能造成明显影响。

【讨论】:

    【解决方案2】:

    Tami - 在使用 linq 并添加自动编号主键时坚持“最佳实践”不是一个好主意,即使它不会用于插入或更新之外?我可以想到许多情况,其中看似“非要求”的主键后来在尝试更新到其他平台等时会导致麻烦。

    如果有一个令人信服的理由不添加“盲”主键,那么在问题中详细说明这一点也可能会有所帮助。我想不出任何不添加它的理由,尤其是如果这意味着您不必围绕限制编写代码。

    吉姆

    [编辑] 塔米 - 我会跟你说实话。您可能必须调查约定以最好地满足此问题的任何答案。基本上,尽管'你不需要'记录索引,由于没有被编辑或删除,linq 的约定是基于数据完整性的假设。本质上,linq(和许多其他编程工具)需要一个约定,允许它们简洁地识别它们带入范围的每个对象的唯一键。如果不定义这个,你就绕过了这个约定,因此 linq 会为你标记这个。 fwd 的唯一方法是顺其自然。即使您“感觉”索引是多余的,linq 也要求它允许您访问内置的全部功能。

    【讨论】:

    • 感谢吉姆的回复……它是一个仅用于跟踪每秒车辆记录的表格……我不想更新 n 删除其中的 ani 记录……它仅用于插入。跨度>
    • 那么如果添加 PK 列会发生什么“中断”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多