1

LINQPad を使用して SQL CE 4 データベースに新しいレコードを挿入しようとしていますが、テーブルの ID の問題に問題があります。たとえば、次の単純なテーブルがあるとします。

PEOPLE
Id int IDENTITY(1,1) NOT NULL,
Name nvarchar(100) NOT NULL

私は間違ったやり方をしているかもしれませんが、LINQPadでこれを試しました

People person = new Person { Name = "Bob" };
People.InsertOnSubmit(person);
SubmitChanges();

しかし、私は SqlCeException という状態を取得します

"The colum cannot be modified. [ Column name = Id ]"

SQL を使用してレコードを挿入できます。これは、SQL CE またはそのデータ プロバイダーからのエラーなしで機能し、SQL CE は、私が必要としている Id 列を設定します。

INSERT INTO PEOPLE (Name) VALUES ('Bob');

私が見逃している別のステップはありますか?それがLINQPadの問題かどうかさえわかりませんが、今このコードを試しているので、とにかく尋ねたいと思いました。

4

2 に答える 2

2

これをLinqPadで実行すると何が得られますか

(from dm in this.Mapping.GetTable(typeof(People)).RowType.DataMembers 
    select new  { dm.DbType, dm.Name, dm.IsPrimaryKey , dm.IsDbGenerated }
 ).Dump();

特に、私が理解しているように、IsDbGenerated は id 列に対して true である必要があります。

以前LinqPadで使用したSQL CE 3.5データファイルがあり、挿入用に生成されたSQLを見ると、idは言及されていません

于 2011-05-27T17:46:45.957 に答える
1

これはおそらく dbml ファイルの問題です。列が ID としてマークされているかどうか (または L2S でこれが呼び出されているもの) を確認します。問題は、ID が挿入クエリに表示されないことです。

于 2011-05-27T17:21:09.767 に答える