我正在与一个简单的实体类与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