我正在从数据库中检索带有Guid标识符的实体...我需要将实体保存到另一个数据库并保持相同的Guid标识符。现在,NHibernate每次执行保存时都会生成一个新的Guid操作,这是正常的,因为我以这种方式配置了实体的映射文件。 我有可能在运行时修改我的用例的映射吗?
以下是我如何定义ID的映射,如果可能的话,我希望保持这样。
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
Table("t_Order");
Id(o => o.Id).GeneratedBy.GuidComb();
.....
.....
.....
}
}
以下是我尝试更改为IdentifierStrategyGenerator的方法,但是没有效果,NHibernate会为每个保存操作分配一个新的GUID,而我正在丢失所需的标识符。
private void UpdateClientDatabase()
{
var key = HibernateMultipleDatabasesManager.Configuration
.GetClassMapping(typeof(Order)).Key as NHibernate.Mapping.SimpleValue;
key.IdentifierGeneratorStrategy = "assigned";
key.NullValue = "undefined";
using (var session = HibernateMultipleDatabasesManager.DataSessionFactory("SQLiteDatabase").OpenSession())
{
_downloadedOrders.OfType<Order>().ForEach(_ => session.Save(_));
}
}
答案 0 :(得分:0)
您可以直接将SQL语句编写为异常。 将实体复制到另一个数据库听起来像是我的例外。
请查看this answer示例。
Session.GetISession().CreateSQLQuery("insert ....").ExecuteUpdate();