0

我正在学习 Linq-to-SQL。我想添加一条记录,但在以下方面出现异常InsertOnSubmit()

无法对“表(GuestbookEntry)”执行创建、更新或删除操作,因为它没有主键。

但是我的数据库确实有一个主键。

这是我的代码:

[Table(Name = "GuestbookEntry")]
public class GuestbookEntry
{
    [Column(DbType = "int not null, IsPrimaryKey=true, IsDBGenerated=true")]
    public int Id { get; set; }
    [Column]
    public string Name { get; set; }
    [Column]
    public string Message { get; set; }
    [Column]
    public DateTime DateAdded { get; set; }
}

public class GuestbookContext : DataContext
{
    public Table<GuestbookEntry> GuestBookEntries;
    //public Table<Order> Orders;
    public GuestbookContext(string connection) : base(connection) { }
}

...

private GuestbookContext dbGuestbook = new GuestbookContext("GuestBookConnection");

...

dbGuestbook.GuestBookEntries.InsertOnSubmit(entry);
dbGuestbook.SubmitChanges();

你能告诉我有什么问题吗?

谢谢。

4

2 回答 2

0

看起来你需要为你的表定义一个主键

于 2012-09-12T18:06:58.423 回答
0

当我学习 LINQ-to-SQL 时,我遵循的最简单的方法是专门使用 LINQ-to-SQL 设计器,而不是尝试手动编码数据模型。这样,我只需确保完全按照我想要的方式设置数据库模式。一旦我这样做了,只需遵循以下步骤:

  1. 在服务器资源管理器中创建与数据库的数据连接。
  2. 从解决方案资源管理器上下文菜单中创建一个新的 LINQ-to-SQL 类项(添加... | 数据 | LINQ to SQL 类。将其命名为GuestBook.dbml
  3. 将表从数据连接拖到设计器。我假设您的一张表名为GuestBookEntry

然后,在您的代码中,执行插入:

using (GuestBookContext dc = new GuestBookContext())
{
    GuestBookEntry entry = new GuestBookEntry();
    ...
    (populate required fields, BUT DON'T TOUCH THE PRIMARY KEY FIELD)
    ...
    dc.GuestBookEntries.InsertOnSubmit(entry);
    dc.GuestBookEntries.SubmitChanges();
}
于 2012-09-12T19:10:07.737 回答