2017-01-06 33 views
0

當調用上下文的Attach方法將對象附加到上下文時,負序列號應暫時分配給Identity屬性。在我的情況下,該值似乎是永久性的,最終將對象保存到數據庫時會導致錯誤。EF Core將負序號分配給自動增量int字段

public virtual void Insert(TEntity entity) 
    { 
     entity.ObjectState = ObjectState.Added; 
     _dbSet.Attach(entity); 
     _context.SyncObjectState<TEntity>(entity); 
    } 

public class Tier:Entity 
{ 
    public Tier() 
    { 

    } 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int TierID { get; set; } 
    public string CountryID { get; set; } 
    public string TierName { get; set; } 
    public int TierNo { get; set; } 

    public virtual ICollection<AdministrativeStructure> AdministrativeStructures { get; set; } 

    public Country Country { get; set; } 
} 

我使用的EntityFramework核心1.1.0與MSSQL服務器2016

+0

是什麼類型的 '一線'? –

+1

請閱讀[問]並提供[mcve]。 – CodeCaster

+0

定義「隨機」 - 每次都是相同的「隨機」數字,還是每個「層次」實例的不同數字? – soupdog

回答

1

讓我們來看看。如果創建這樣的屬性的類,並且不會給它任何輸入,整數將有以下值:

0

代碼:

class Program 
{ 
    static void Main(string[] args) 
    { 
     tmpClass testClass = new tmpClass(); 
     Debug.WriteLine(testClass.IntTest); 


    } 

    public class tmpClass 
    { 
     public int IntTest { get; set; } 
    } 
} 

正如你可以看到我沒」不要操縱任何東西。值爲零,0,來自Int的默認值。你說你使用TierID作爲主鍵值。你的桌子是否知道如何處理這個問題,比如它會給它一個ID還是你需要給它一個ID?也許那是錯誤發生的地方。錯誤的主鍵。

在你的情況下,似乎數據庫一代似乎沒有正確工作。

MSDN Documentation

嘗試:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int TierId { get; set; } 
+0

我沒有提供任何ID。數據庫這樣做。但我想我已經能夠發現問題的來源。我用了一個存儲庫模式框架(URF),做了一些細微的修改,因此它可以與DOTNET的核心工作,並在此行是什麼,是創造該問題的「公共虛擬無效SyncObjectState (TEntity實體),其中TEntity:類,IObjectState { 條目(實體).State = StateHelper.ConvertState(實體。ObjectState); 「 }」 –

+0

在這條線上發生了一些似乎隻影響「TierID」的內容,將它改爲負數,我沒有絲毫的想法發生了什麼,如果這樣可以幫助您我在這裏 –

+0

啊,是的,好的,謝謝你的答案,你看看@Tazbir Bhuiyan在幾年前發現的解決方案。http://stackoverflow.com/questions/31333916/failed-to-save-data-using- ef6-error-originalvalues-can-the-used-for-entities – Cataklysim