因此,我需要將數據從現有數據庫SqLite移動到新的SqlCe數據庫。我用NHibernate加載實體,因爲這是我用於SqLite數據庫的DAL。新數據庫(SqlCe)使用EF Code-First/DbContext創建。SqlCe,EF5,IDENTITY_INSERT用於自動生成Ids的表格
現在我只想爲每個表創建一次性使用方法,以手動插入實體與其現有的ID(因爲我想保留Ids)。這些表使用自動生成的ID,所以我需要重寫這個。問題是,最簡單的方法是什麼?可以用DbContext完成嗎?
最好它應該是強類型的,但到目前爲止我嘗試使用SqlCeConnection .CreateCommand/.ExecuteNonQuery,與硬類型的SQL。但是不確定這裏的語法,因爲我不太瞭解SQL。
對於下面的代碼,指定變量鍵的各種嘗試產生以下例外;
@ 0 =>消息=缺少一個參數。 [Parameter ordinal = 8]
'{0}'=>消息=數據轉換失敗。 [OLE DB狀態值(如果已知)= 2]
{0} =>消息=數據轉換失敗。 [OLE DB狀態值(如果已知)= 2]
var conn = new SqlCeConnection("Data Source=" + DbFileName);
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = @"SET IDENTITY_INSERT AccountBases ON;";
cmd.ExecuteNonQuery();
cmd.CommandText = string.Format(
@"INSERT INTO AccountBases (
AccStartTime, AccType, Broker,
ClientID, ConnType, CreationDate,
Guid, Id, Name,
Strategy)
VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9});",
a.AccStartTime,
a.AccType,
a.Broker,
a.ClientID,
a.ConnType,
a.CreationDate,
a.Guid,
a.Id,
a.Name,
a.Strategy);
cmd.ExecuteNonQuery();
conn.Close();