Bri*_*ter 11 c# linq sql-server sql-server-2005 linq-to-sql
我正在使用LINQ to SQL的简单实体类(SQL Server 2005 SP3 x64).
[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 */
}
Run Code Online (Sandbox Code Playgroud)
这里只有两件有趣的事情:
这是表格的样子:
create table dbo.TBL_REGISTRATION
(
TBL_REGISTRATION_PK uniqueidentifier primary key clustered
rowguidcol
default newid(),
/* other columns ommited for brevity */
)
Run Code Online (Sandbox Code Playgroud)
当我将此实体附加到我的表并在我的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 */
}
Run Code Online (Sandbox Code Playgroud)
这有效.
为什么它不是第一种方式?我在这里做错了还是LINQ缺陷?