由于没有主键,因此无法对表执行创建,更新或删除操作 [英] Can't perform Create, Update or Delete operations on Table because it has no primary key
问题描述
我一直试图在表中插入具有标识列RequestID(也是主键)的行
I've been trying to insert row in the table having an identity column RequestID (which is primary key as well)
HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body };
if (attachment != null)
logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream);
Database.HelpdeskLogs.InsertOnSubmit(logEntry);
但是我的代码不可避免地会引发以下错误
But my code inevitably throws following error
由于没有主键,因此无法对表执行创建,更新或删除操作.
Can't perform Create, Update or Delete operations on Table because it has no primary key.
尽管主键列确实存在
这就是我试图做的:
- 要在调试器中查看在对象模型中插入的标识列的值.是0
- 要手动(使用SQL)将伪造的值插入表中-工作正常,可以按预期生成标识值
- 确保SQLMetal是否已正确生成表映射.一切正常,主键属性正确生成
尽管如此,两种方法都无济于事.诀窍是什么,有人知道吗?
Nevertheless, neither of approaches helped. What's the trick, does anybody know?
推荐答案
我在C#代码中也遇到了这个问题,并且意识到我忘记了IsPrimaryKey名称:
I've also had this problem come up in my C# code, and realized I'd forgotten the IsPrimaryKey designation:
[Table (Name = "MySessionEntries" )]
public class SessionEntry
{
[Column(IsPrimaryKey=true)] // <---- like this
public Guid SessionId { get; set; }
[Column]
public Guid UserId { get; set; }
[Column]
public DateTime Created { get; set; }
[Column]
public DateTime LastAccess { get; set; }
}
即使您的数据库表(在这种情况下为 MySessionEntries )已经定义了主键,也需要
,因为除非您使用过linq2sql工具,否则Linq不会自动找出该事实.将您的数据库定义导入Visual Studio.
this is needed even if your database table (MySessionEntries, in this case) already has a primary key defined, since Linq doesn't automagically find that fact out unless you've used the linq2sql tools to pull your database definitions into visual studio.
这篇关于由于没有主键,因此无法对表执行创建,更新或删除操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!