2016-07-05 15 views
1

當我嘗試在ServiceStack(針對SQL Server 2014)中使用下面的類中的對象使用「插入」功能時,它會嘗試插入0(默認的ContactId屬性)爲ContactId而不是在數據庫中自動生成一個。 ContactId是IDENTITY NOT NULL。 ContactId是聚簇索引,但GlobalContactId是非聚簇主鍵。服務堆棧身份不是PK - 插入失敗

[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到其他數據無法通過性能原因返回主頁的表

我會想如果一個屬性有[AutoIncrement]並且該值與該類型的默認值相匹配,那麼它會假定該值沒有設置。

編輯

現在我只是恢復到使用的ContactID既是PK和身份,並配有獨特的檢查約束

+0

可能的副本http://stackoverflow.com/questions/19277431/servicestack-ormlite-cannot-update-identity-column – Oleg

+0

不是重複。這個問題是關於具有自動增量的表格的PK - 我知道該如何處理。在這種情況下,標識字段不是主鍵。 –

+0

也許這可以幫助。 http://techfunda.com/howto/121/auto-increment-property-in-model –

回答

2

在OrmLite的[AutoIncrement]屬性是用於指定自動添加唯一標識符增加主鍵。所以它不能用於非主鍵列。