我一直在尝试在具有标识列RequestID(也是主键)的表中插入行
HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body };
if (attachment != null)
logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream);
Database.HelpdeskLogs.InsertOnSubmit(logEntry);
但是我的代码不可避免地会抛出错误
无法对表执行创建,更新或删除操作,因为它没有主键。
尽管确实存在主键列
这就是我试图做的事情:
尽管如此,这两种方法都没有帮助。什么是诀窍,有人知道吗?
答案 0 :(得分:31)
我的C#代码中也出现了这个问题,并意识到我忘记了IsPrimaryKey的名称:
[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中。
答案 1 :(得分:10)
LINQ不允许在没有主键的情况下将数据插入表中。要使用没有主键的表来实现插入数据,您可以使用存储过程或创建查询并使用LINQ执行。下面的链接提供了相同的解释。
Can't perform Create, Update or Delete operations on Table(Employee) because it has no primary key
答案 2 :(得分:4)
删除表格然后重新插入。在执行此操作之前,您必须确保字段旁边有一个小键。重新编译你的项目,一切都应该没问题。
仅仅因为您更新了数据库并不意味着DBML文件会以某种方式自动更新。它没有,抱歉。
答案 3 :(得分:3)
由于该表在SQL Server中具有主键,因此请在linq2sql设计器中重新添加该表。
如果不是这种情况,您可以在设计器上手动配置哪些属性是主键的一部分。