0

私は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();

何が悪いのか教えていただけますか?

ありがとう。

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. テーブルをデータ接続からデザイナーにドラッグします。テーブルの 1 つがGuestBookEntryという名前であると想定しています。

次に、コードで 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();
}
于 2012-09-12T19:10:07.737 に答える