所以我需要将数据从现有数据库 SqlLite 移动到新的 SqlCe 数据库。我使用 NHibernate 加载实体,因为这是我用于 SqLite 数据库的 DAL。使用 EF Code-First / DbContext 创建新数据库 (SqlCe)。
现在我只想为每个表创建一个一次性使用方法,以“手动”插入具有现有 ID 的实体(因为我想保留 ID)。这些表使用自动生成的 ID,所以我需要覆盖它。问题是,最简单的方法是什么?可以用 DbContext 完成吗?
最好它应该是强类型的,但到目前为止,我尝试使用带有硬类型 SQL 的 SqlCeConnection .CreateCommand / .ExecuteNonQuery。但不确定这里的语法,因为我不太了解 SQL。
对于下面的代码,指定变量键的各种尝试都会产生以下异常;
@0 => 消息=缺少参数。[ 参数序数 = 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();