我正在與一個簡單的實體類與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 */
}
只有兩個在這裏有些有趣的事情:
- 類和屬性名稱不一樣的表和列名
- 主鍵是一個GUID(唯一標識符)
這裏的表是什麼樣子:
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屬性來包裝我的RegistrationID屬性,以使LINQ感到滿意。
[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 */
}
This works。
爲什麼第一種方式不起作用?我在這裏做錯了什麼,或者這是一個LINQ缺陷?
我很高興終於發現,(一)我不瘋了,(二)它正在修復。 – 2009-09-17 11:08:30