LinqToSql:无法插入记录

时间:2012-09-12 18:02:16

标签: c# linq-to-sql

我正在学习Linq-to-SQL。我想添加一条记录,但在InsertOnSubmit()上获得例外:

  

无法执行创建,更新或删除操作   'Table(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();

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

感谢。

2 个答案:

答案 0 :(得分:0)

您似乎需要为表格定义主键

答案 1 :(得分:0)

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

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

    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();
    }