除PK之外的字段上的ServiceStack标识 - 插入失败

时间:2016-07-05 18:33:34

标签: sql-server servicestack sql-server-identity

当我尝试使用以下类中的对象在ServiceStack中使用“插入”功能(针对SQL Server 2014)时,它会尝试为ContactId插入0(默认的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;}
     ...

我这样做是因为:

  1. 这是一个分布式应用程序,需要打电话回家 - 因此guid
  2. 这是旧数据的导入,用户更容易引用int而不是guid(至少对于他们的特定位置),并且他们希望继续前进
  3. 我将ContactId作为FK用于其他表,这些表的数据由于性能原因没有打电话回家
  4. 我原以为如果某个属性有[AutoIncrement]并且该值与该类型的默认值匹配,那么它会假设该值未设置。

    修改

    现在我只是回复使用ContactId作为PK和身份,并添加uniqueidentifier和唯一的检查约束

1 个答案:

答案 0 :(得分:2)

在OrmLite中,[AutoIncrement]属性用于指定自动递增主键。因此,它不能用于非主键列。