LINQ to SQL(SQL Server 2005 SP3 x64)を使用した単純なエンティティクラスで作業していました。LINQ to SQLエンティティの列名属性がguidの主キーで無視される
[Table(Name="TBL_REGISTRATION")]
public sealed class Registration : IDataErrorInfo
{
[Column(Name = "TBL_REGISTRATION_PK", IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public Guid RegistrationID { get; private set; }
/* other properties ommited for brevity */
}
ここでは2つだけやや面白いものがあります。
- クラスとプロパティ名は、テーブル名とカラム名
- と同じではありません主キーにGUID(UNIQUEIDENTIFIER)であるが
ここでは、テーブルは次のようになります。
create table dbo.TBL_REGISTRATION
(
TBL_REGISTRATION_PK uniqueidentifier primary key clustered
rowguidcol
default newid(),
/* other columns ommited for brevity */
)
私は私のテーブルには、このエンティティを添付し、私のDataContextに変更を送信すると、LINQスタックはバックSQLExceptionがスローされます。
SqlExceptionが(0x80131904):無効な列名「RegistrationID」
LINQを無視しているように見えますRegistrationIDプロパティのColumn(Name = "TBL_REGISTRATION_PK")属性。私はそれを動作させるためにさまざまなアトリビュートデコレーションを使っていました。最終的に私は個人的なTBL_REGISTRATION_PKプロパティを解決し、LINQを満足させるためにRegistrationIDプロパティをラップしました。
[Table(Name="TBL_REGISTRATION")]
public sealed class Registration : IDataErrorInfo
{
public Guid RegistrationID { get; private set; }
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
private Guid TBL_REGISTRATION_PK { get { return RegistrationID; } set { RegistrationID = value; } }
/* other properties ommited for brevity */
}
これは機能します。
なぜ最初の方法で動作しませんでしたか?私はここで何か間違っているのですか?これはLINQの欠陥ですか?
私は最終的に(a)私は狂っていない、(b)それは修正されていることを発見してうれしいです。 –