2009-04-10 20 views
20

私は(同様に主キーです)ID列のRequestIDそれは主キー

HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body }; 
    if (attachment != null) 
     logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream); 
    Database.HelpdeskLogs.InsertOnSubmit(logEntry); 
を有するテーブルに行を挿入しようとしてきたが持っていないため、表上の操作を作成、更新または削除を実行できません

しかし、私のコードは、必然的に、エラー、次のスロー

、アップデートを作成するか、それは主キーがないため、表に削除操作を実行することはできません。主キー列にもかかわらず

は確かに私がしようとしたものだ

が存在する:

  1. デバッガでオブジェクトモデルに挿入されたID列の値を検索するには。それは0
  2. テーブルに偽の値を手動で挿入する - 正常にID値が生成されます。
  3. SQLMetalがテーブルマップを正しく生成しているかどうかを確認します。すべてOK、主キー属性が正しく生成されています

どちらのアプローチも役に立ちませんでした。誰が知っているのですか?

答えて

3

テーブルにSQL Serverの主キーがあるため、linq2sqlデザイナでテーブルを再追加します。

そうでない場合は、デザイナで手作業でプライマリキーの一部であるプロパティを構成できます。

4

テーブルを削除してから、再度挿入します。これを行う前に、フィールドの隣に小さな小さなキーがあることを確認する必要があります。プロジェクトを再コンパイルしてください。すべて正常であるはずです。

データベースを更新しただけでも、何らかの形で自動的にDBMLファイルが更新されたわけではありません。それは、申し訳ありません。

29

私もこの問題は私のC#のコードに出てくる、と私はIsPrimaryKey指定忘れて実現していました:これはこれで、(も、あなたのデータベーステーブル場合MySessionEntriesを必要とされている

[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; } 
    } 

を大文字小文字を区別していない場合は、linq2sqlツールを使用してデータベース定義をビジュアルスタジオに取り込んでいない限り、Linqは自動的にその事実を検出しないため、主キーがすでに定義されています。

+2

ありがとうございます!私のコードは少し違って見えましたが、プリンシパルは同じです。[global :: System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ ID"、DbType = "UniqueIdentifier NOT NULL"、IsPrimaryKey = true)] 'トリック。 –