6

服务器无法生成“tinyint”类型的主键列...

这更像是一个答案而不是一个问题,因为我一直在堆栈上搜索这个并且找不到任何问题/答案来帮助。

基本上,我试图做一个插入(下)

public void AddTask(Task task)
{
    TwoDooDataContext db = new TwoDooDataContext();
    db.Tasks.InsertOnSubmit(task);
    db.SubmitChanges();
}

我的主键设置为 Identity true 但数据类型设置为 TinyInt ...请参阅下面的类属性

ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, 
DbType="TinyInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]

这样做会导致错误消息:

服务器无法生成“tinyint”类型的主键列

所以我无法弄清楚这一点,直到我能找到这个链接...... http://connect.microsoft.com/VisualStudio/feedback/details/402060/accessing-a-primary-key-id-when-its-declared- as-a-tinyint-using-linq

这是一个已知问题,但尚未修复 - 我使用的是 SQL 2008 Express 和 VS Web Developer 2010 Express。

我的解决方法是将数据类型更改为 Int 并且一切正常。希望这有助于以防其他人正在寻找解决方案。

实际上是一个问题 - 在我的案例中使用的最佳数据类型是什么?即使它正在工作,我应该将其保留为 Int 还是更改它?谢谢

4

1 回答 1

2

Database Administrators 对何时使用 TINYINT 而不是 INT 进行了很好的讨论,尽管我认为它不适用于您的情况。如果使用 int 可以解决已知问题,那么您需要一个很好的理由来更改它。我会保持原样。

于 2012-04-28T03:38:16.010 回答