ID列RequestID(主キーでもある)を持つテーブルに行を挿入しようとしています
HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body };
if (attachment != null)
logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream);
Database.HelpdeskLogs.InsertOnSubmit(logEntry);
しかし、私のコードは必然的に次のエラーをスローします
テーブルには主キーがないため、テーブルに対して作成、更新、または削除操作を実行できません。
主キー列が実際に存在するにもかかわらず
それが私がやろうとしたことです:
それにもかかわらず、どちらのアプローチも役に立ちませんでした。トリックは何ですか、誰か知っていますか?
また、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がその事実を自動的に検出しないためです。ビジュアルスタジオへのデータベース定義。
LINQでは、主キーなしでテーブルにデータを挿入することはできません。主キーのないテーブルでデータを挿入するには、ストアドプロシージャを使用するか、クエリを作成してLINQを使用して実行します。以下のリンクは同じことの良い説明を提供します。
テーブルを削除してから、再度挿入します。これを行う前に、フィールドの横に小さな小さなキーがあることを確認する必要があります。プロジェクトを再コンパイルすれば、すべて問題ないはずです。
Dabaseを更新したからといって、DBMLファイルが何らかの形で自動的に更新されるわけではありません。申し訳ありません。
テーブルにはSQLServerの主キーがあるため、linq2sqlデザイナでテーブルを再度追加します。
そうでない場合は、デザイナーで手動で主キーの一部となるプロパティを構成できます。