gpt4 book ai didi

c# - LINQ to SQL 实体列名称属性被 guid 主键忽略

转载 作者:可可西里 更新时间:2023-11-01 08:46:34 25 4
gpt4 key购买 nike

我当时使用 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 */
}

这里只有两点比较有趣:

  1. 类名和属性名与表名和列名不同
  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") 属性。我花了一段时间尝试不同的属性装饰,试图让它发挥作用。最后,我选择了一个私有(private) 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 */
}

这有效。

为什么第一种方法行不通?我在这里做错了什么还是 LINQ 缺陷?

最佳答案

这是 Linq-to-SQL 中的错误。它在 .net 4.0 中已修复。

参见连接#381883: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=381883

关于c# - LINQ to SQL 实体列名称属性被 guid 主键忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1067274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com