我正在尝试使用Fluent NHibernate来迁移需要某些数据库"按摩"的数据库.源数据库是MS Access数据库,我粘贴的当前表是一个带有OLE对象字段的表.目标数据库是MS SQL Server Express数据库.
在实体中我简单地将此字段定义为a byte[]但是在加载时,即使只是为单个记录加载该单个字段,我也遇到了System.OutOfMemoryException
byte[] test = aSession.Query<Entities.Access.Revision>().Where(x => x.Id == 5590).Select(x => x.FileData).SingleOrDefault<byte[]>();
Run Code Online (Sandbox Code Playgroud)
然后我尝试实现此处列出的blob类型,但现在运行时我收到错误:
"无法将'System.Byte []'类型的对象强制转换为'TestProg.DatabaseConverter.Entities.Blob'."}
我无法想象Ole对象是否大于100mb但无法检查.有没有什么好的方法可以使用Fluent NHibernate从一个数据库中复制出来并将其保存到另一个数据库中,还是需要查看其他选项?
我处理这些的正常循环是:
IList<Entities.Access.Revision> result;
IList<int> recordIds = aSession.Query<Entities.Access.Revision>().Select(x => x.Id).ToList<int>();
foreach (int recordId in recordIds)
{
result = aSession.Query<Entities.Access.Revision>().Where(x => x.Id == recordId).ToList<Entities.Access.Revision>();
Save(sqlDb, result);
}
Run Code Online (Sandbox Code Playgroud)
保存功能只是将属性从一个复制到另一个,并且对于某些实体用于操纵数据或向用户提供与数据问题相关的反馈.我正在为两个数据库使用无状态会话.
-
通过进一步测试,它似乎挂在上面的物体大约是60-70mb.我目前正在测试使用GetBytes使用OleDbDataReader获取数据.
-
更新(11月24日):我还没有找到一种方法让它与NHibernate一起使用.我确实使用常规db命令对象.我把以下制作的函数的代码放在任何好奇的人身上.这是我的数据库转换器中的代码,因此前缀为"a"的对象是访问数据库对象,而"s"是sql版本.
public void MigrateBinaryField(int id, string tableName, string fieldName)
{
var aCmd = new OleDbCommand(String.Format(@"SELECT ID, {0} FROM {1} WHERE ID = {2}", …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我将数据从数据库移动到另一个.我有几张桌子在工作,但目前的桌子不是.当调用时Session.Save(entity)似乎没有发生任何事情(没有从NHibernate发送插入记录).未保存的实体是Configuration下面代码中的实体.我包含了与另一个正常工作的实体相关的其他代码(大约十几个).数据从Access数据库传输到MSSQL数据库.
复制对象并执行会话保存的代码.在Configuration实体上调用save时,不会插入任何内容.
public void Save(Entities.Access.CompTool o)
{
var n = new CompTool();
n.Name = o.Name;
n.Description = o.Description;
n.DefaultLocation = o.DefaultLocation;
n.DateModified = o.DateModified;
n.OldId = o.Id;
GetSession().Save(n);
}
public void Save(Entities.Access.Configuration o)
{
var n = new Configuration();
n.Name = o.Name;
n.Description = o.Description;
n.Value = o.Value;
GetSession().Save(n);
}
Run Code Online (Sandbox Code Playgroud)
制图 Configuration
using TestProg.DatabaseConverter.Entities.Sql;
using FluentNHibernate.Mapping;
namespace TestProg.DatabaseConverter.Mappings.Sql
{
public class ConfigurationMap : ClassMap<Configuration>
{
public ConfigurationMap()
{
Table("Configuration");
Id(x => x.Name).GeneratedBy.Assigned();
Map(x => …Run Code Online (Sandbox Code Playgroud)