NHibernate是否具有用于更新的内存实体

时间:2012-08-26 04:17:06

标签: asp.net-mvc nhibernate fluent-nhibernate

我是NHibernate的新手。我们正在使用Dapper进行检索并计划将NHibernate用于CRUD。

我试图通过一对多关系中的父列表对象删除子对象。

当我使用NHibernate会话检索对象并删除该项时,这是有效的。

var mercedes = Read("chevrolet"); //queries from nhibernate session
var model = mercedes.Models.Where(c => c.Id == 181).Single(); 
mercedes.Models.Remove(model);

当我手动创建对象并附加thecars模型时,它无法将其删除。

var mercedes = new Make() { Id = 77, Name = "chevrolet" };//manually created the object
mercedes.Models = GetAllModels(77);//I have it in-memory            
var model = mercedes.Models.Where(c => c.Id == 173).Single();
mercedes.Models.Remove(model);

我想我在做一些奇怪的事情。但我能够使用第二种方法添加/更新模型,所以为什么我不能删除它。任何见解请。

1 个答案:

答案 0 :(得分:1)

当您创建新的域对象时,它不会附加到NHibernate会话(例如,除非您正在创建新对象并调用Save)。因此,从模型集合中删除实际上并没有做任何事情。

您的第二个示例似乎不是一个特别好的做法,但您可以 recreate an object and attach it to your NHibernate session使用Session.LockMergeUpdate是公平的正常,取决于您的首选行为)。