我的一张表上有一个复合主键(Int 和 DateTime)。当我尝试使用 LINQ 添加新记录时(将 DateTime 字段设置为“AutoGeneratedValue = true”,并将 getdate() 作为服务器上的默认值),出现以下错误:
The primary key column of type 'DateTime' cannot be generated by the server.
知道这是为什么吗?我相信它以前有效,但我无法弄清楚是什么导致它停止工作。遗憾的是,关于此类错误的具体信息很少。
此外,通过 SQL Server Management Studio 手动提交行工作正常,并正确自动生成日期时间值。
编辑 - 正常工作 - 一定是 LINQ to SQL 中的错误:如果我在 DBML 中将 DateTime 的“IsPrimaryKey”设置为 false,同时将复合键保留在数据库端。
所以这是可行的:
- SQL Server:复合主键(Id INT、MyDate DATETIME - 自动生成)
- DBML:将仅 Id 标记为主键。将 MyDate 标记为自动生成,但不为主键。
我认为这是 LINQ to SQL 中的错误。
最佳答案
需要在SQL Server中设置字段默认为自生成。对于 DateTime 字段,这通常是 GETDATE()
。
编辑:
除了 AutoGeneratedValue = true
您还需要将 Auto-Sync
设置为 OnInsert
。
关于c# - 服务器无法生成错误 "The primary key column of type ' DateTime'。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220442/