C# Nhibernate的所有删除孤立项
因此,我有一个名为order的父对象和一个名为orderLineItems的子对象集合,在nHibernate中Cascade设置为All Delete orphan。这是我的密码C# Nhibernate的所有删除孤立项,c#,asp.net,nhibernate,C#,Asp.net,Nhibernate,因此,我有一个名为order的父对象和一个名为orderLineItems的子对象集合,在nHibernate中Cascade设置为All Delete orphan。这是我的密码 using( var session = _sessionManager.GetSession()) using (var transaction = session.BeginTransaction()) { var order = _repository.
using( var session = _sessionManager.GetSession())
using (var transaction = session.BeginTransaction())
{
var order = _repository.GetOrderEagerlyByOrderId(session, fromDb.Id);
var now = DateTime.Now;
const string user = "GNB\\Username";
var future = now.AddYears(1);
var taxType = new TaxType(0, "Code", "AlternateNameE", "AlternateNameF", "NameE", "NameF", "DescriptionE", "DescriptionF", 13, now, future, user, now, user, now);
var _serviceCatRep = new ServiceCatalogueRepository();
var serviceCatalogueItem = _serviceCatRep.GetServiceCatalogueItemByCode(session, "VR-PASS");
var orderLineItem1 = new OrderLineItem(0, null, "DescriptionE", "DescriptionF", 1, 10, null, null, 5, false, serviceCatalogueItem, null, user, now, user, future);
order.OrderLineItems.Clear();
order.OrderLineItems = order.OrderLineItems == null ? new List<IOrderLineItem> { orderLineItem1 } : new List<IOrderLineItem>(order.OrderLineItems) { orderLineItem1 };
_repository.SaveOrUpdate(session, order);
transaction.Commit();
}
使用(var session=\u sessionManager.GetSession())
使用(var transaction=session.BeginTransaction())
{
var order=\u repository.getOrderyByOrderId(会话,fromDb.Id);
var now=DateTime.now;
const string user=“GNB\\Username”;
var future=now.AddYears(1);
var taxType=新的分类类型(0,“代码”、“替代名称”、“替代名称”、“名称”、“名称F”、“描述一”、“描述F”、13、现在、未来、用户、现在、用户、现在);
var_serviceCatRep=新服务目录存储();
var serviceCatalogeItem=_serviceCatRep.getserviceCatalogeItemByCode(会话,“VR-PASS”);
var orderLineItem1=新的OrderLineItem(0,null,“descriptionOne”,“DescriptionF”,1,10,null,null,5,false,serviceComcatalogeItem,null,user,now,user,future);
order.OrderLineItems.Clear();
order.OrderLineItems=order.OrderLineItems==null?新列表{orderLineItem1}:新列表(order.OrderLineItems){orderLineItem1};
_SaveOrUpdate(会话、顺序);
Commit();
}
它在transaction.Commit()上失败代码>中出现错误:
NHibernate.HibernateException:拥有实体实例不再引用cascade=“all delete orphan”的集合
另外,通过一个示例,all和all delete Orphant之间有什么区别。在映射中-将集合标记为inverse()
你有:
order.OrderLineItems.Clear();
order.OrderLineItems = order.OrderLineItems == null
? new List<IOrderLineItem> { orderLineItem1 }
: new List<IOrderLineItem>(order.OrderLineItems) { orderLineItem1 };
您是否尝试过cascade=“all”
?这很有效,但我真的需要它完全正确。这对cascade all和inverse=true都有效。它也适用于级联所有和反向=假。它们都不适用于cascade all delete orphane,我假设您希望集合只包含orderLineItem1,因此要删除已经存在的任何其他内容?
order.OrderLineItems.Clear();
order.OrderLineItems = order.OrderLineItems == null
? new List<IOrderLineItem> { orderLineItem1 }
: new List<IOrderLineItem>(order.OrderLineItems) { orderLineItem1 };
order.OrderLineItems.Add(orderLineItem1);