【问题标题】:getting an error with linq-to-sql on a table with a composite primary key在具有复合主键的表上使用 linq-to-sql 出现错误
【发布时间】:2010-09-17 19:36:24
【问题描述】:

linq-to-sql 给了我这个错误“无法对 'Table(Friend)' 执行创建、更新或删除操作,因为它没有主键。”来自具有复合主键的表

【问题讨论】:

  • 你的意思是复合主键吗?

标签: sql-server linq-to-sql


【解决方案1】:

使用单个字段 int 作为主键时,LINQ-to-SQL 的性能最佳。如果您有一个复合主键,最好的办法是使用单个整数字段为该表创建一个代理键。

【讨论】:

  • 投反对票,因为 LinqToSql 使用复合主键,当一个代理整数不合适时,您不需要添加代理整数(例如,如果复合键自然地强制执行所需的行的唯一性)。相反,您可以在 DBML 文件中手动将 2 列属性设置为 Primary Key = True,LinqToSQL 将按预期工作。
  • 你是绝对正确的。您还可以创建代理项并在多个列上指定唯一约束。问题变成您是否希望手动管理复合主键或允许 LINQ-to-SQL 管理单个整数键本身。我自己更喜欢单个整数主键,主要是因为我不喜欢复合外键。您的经验和偏好可能会有所不同...
  • 我完全同意卢克的观点。创建代理键只是为了让 Linq to SQL 满意并不是一个合理的理由。
  • 最初,我并不关心被否决,因为它开始是“每个人自己”的事情。然后我注意到了 cmets 的日期。在事实发生四年和六年后被否决是小事的高度。如果我的回答在技术上不正确,我会理解,但事实并非如此。如果您不想创建代理键只是为了让 Linq-to-SQL 满意,请不要。出于这个原因,我什至不这样做。我更喜欢单个整数键字段的性能,而不是键入多个不同类型的字段。访问速度更快,存储空间更小......我的两分钱。
猜你喜欢
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2014-10-27
相关资源
最近更新 更多