PK 以外的字段上的 ServiceStack 标识 - 插入失败
ServiceStack Identity on field other than PK - Insert fails
当我尝试在 ServiceStack 中使用 "Insert" 函数(针对 SQL Server 2014)时,使用下面的对象 class,它会尝试插入一个 0(默认为ContactId 属性) 作为 ContactId 而不是在数据库中自动生成一个。 ContactId 是 IDENTITY NOT NULL
。 ContactId 是聚集索引,但 GlobalContactId 是非聚集主键。
[Alias("Contact")]
[Schema("Customer")]
public partial class Contact
{
[PrimaryKey]
public Guid GlobalContactId { get; set; }
[AutoIncrement]
public int ContactId { get; set;}
...
我这样做是因为:
- 这是一个分布式应用程序,需要 phone 主页 - 因此 guid
- 这是旧数据的导入,用户更容易引用 int 而不是 guid(至少对于他们的特定位置),他们将希望继续前进
- 我将 ContactId 用作其他表的 FK,这些表的数据由于性能原因 phone 没有归属
我原以为如果 属性 有 [AutoIncrement]
并且该值与该类型的默认值相匹配,那么它会假定该值未设置。
编辑
现在我只是恢复使用 ContactId 作为 PK 和身份,并添加具有唯一检查约束的唯一标识符
在 OrmLite 中,[AutoIncrement]
属性用于指定一个自动递增的主键。所以它不能用于非主键列。
当我尝试在 ServiceStack 中使用 "Insert" 函数(针对 SQL Server 2014)时,使用下面的对象 class,它会尝试插入一个 0(默认为ContactId 属性) 作为 ContactId 而不是在数据库中自动生成一个。 ContactId 是 IDENTITY NOT NULL
。 ContactId 是聚集索引,但 GlobalContactId 是非聚集主键。
[Alias("Contact")]
[Schema("Customer")]
public partial class Contact
{
[PrimaryKey]
public Guid GlobalContactId { get; set; }
[AutoIncrement]
public int ContactId { get; set;}
...
我这样做是因为:
- 这是一个分布式应用程序,需要 phone 主页 - 因此 guid
- 这是旧数据的导入,用户更容易引用 int 而不是 guid(至少对于他们的特定位置),他们将希望继续前进
- 我将 ContactId 用作其他表的 FK,这些表的数据由于性能原因 phone 没有归属
我原以为如果 属性 有 [AutoIncrement]
并且该值与该类型的默认值相匹配,那么它会假定该值未设置。
编辑
现在我只是恢复使用 ContactId 作为 PK 和身份,并添加具有唯一检查约束的唯一标识符
在 OrmLite 中,[AutoIncrement]
属性用于指定一个自动递增的主键。所以它不能用于非主键列。