2013-03-15 8 views
2

我有一個表Device只有一列UID nvarchar(128)這裏是我的實體:無法看到的SaveChanges()之後調用實體框架的變化在數據庫

[Table(Name="Device")] 
public class Device 
{ 
    [Key] 
    public string UID { get; set; } 
} 

當我試圖插入實體和所有更改提交到數據庫沒問題。但是在數據庫中沒有添加新行。如果我嘗試用相同的UID重複此操作 - 我得到錯誤

違反PRIMARY KEY約束'PK_dbo.Devices'。不能在對象'dbo.Devices'中插入重複鍵。重複鍵值爲...

怎麼了?

編輯:

這裏是我的背景:

public class DeviceContext : BaseDbContext, IDbContext 
{ 
    public DbSet<Entity.Device> Device { get; set; } 

    public new IDbSet<T> Set<T>() where T : class 
    { 
     return base.Set<T>(); 
    } 

    public int SaveChanges() 
    { 
     return base.SaveChanges(); 
    } 

    public void Dispose() 
    { 
     base.Dispose(); 
    } 
} 

失敗SaveChanges()方法。 BaseDbContext只是「connectionstring層」。

DeviceContext context = new DeviceContext(); 
context.Device.Add(new Device() { UID = id }); 
context.SaveChanges(); 
+0

請顯示失敗的代碼 – 2013-03-15 07:39:49

+0

ok - 你在哪裏使用'DeviceContext' - 你添加更多divices的代碼 – 2013-03-15 07:44:35

+0

我已經更新了問題 – 2013-03-15 07:46:07

回答

1

錯誤表示數據已保存。所以我認爲你正在查看錯誤的數據庫。驗證您的DbContext使用的連接字符串。

順便說一句你可以看到在調試器中使用context.Database.Connection.ConnectionString屬性時使用哪個連接。

+0

有兩個問題:第一個 - 我在幾個項目中使用了DataAccessLayer - (WebUI&WebApi [MVC4])。在WebUI中,我的連接字符串在.config中 - 在WebApi中沒有(我猜想entityframework會在連接字符串爲沒有找到。這解釋了爲什麼我沒有得到錯誤)。第二 - 在視覺設計師和管理工作室的數據庫是不同的。 – 2013-03-15 08:19:26

+0

@AntonPutov我有同樣的問題一次,因爲不同的調試和發佈配置:)順便說一句,如果沒有指定連接字符串,那麼EF不使用臨時數據庫 - 它只是在SQLEXPRESS服務器上創建名稱等於DbContext名稱的數據庫 – 2013-03-15 08:21:49

相關問題