NHibernate:无法将项目附加到映射元素
我的映射中有map元素-NHibernate:无法将项目附加到映射元素,nhibernate,map,mapping,Nhibernate,Map,Mapping,我的映射中有map元素- <component name="Resources"> <map name="Inner" table="SomeTable" lazy="false" fetch="join" access="field.lowercase-underscore"> <key column="Id"/> <index column="IndexId" type=
<component name="Resources">
<map name="Inner" table="SomeTable" lazy="false" fetch="join" access="field.lowercase-underscore">
<key column="Id"/>
<index column="IndexId" type="String"/>
<composite-element class="SomeResource">
<property name="Name"/>
</composite-element>
</map>
</component>
在运行之后,我想在SomeTable中包含元素“key1”和“key2”,如何实现这一点?。。目前,nHib在第二次保存之前从SomeTable中删除所有具有指定id的元素。使用此代码,您将创建两个具有相同id的元素,这是主键:这就是NHibernate删除元素“key1”(ent对象)的原因 创建newEntity时,如果您想要一个全新的对象,请不要使用Id属性(就像使用ent一样)。否则,如果要更新现有对象,请执行以下操作:
var ent = new Entity();
ent.Resources.Add("key1", new SomeResource());
var saved = Session.SaveOrUpdate(ent);
Session.Session.Flush();
Session.Session.Clear();
// later...
var entToUpdate = Session.Get<Entity>(saved.Id);
ent.Resources.Add("key2", new SomeResource());
Session.SaveOrUpdate(entToUpdate);
Session.Session.Flush();
Session.Session.Clear();
var ent=new Entity();
Add(“key1”,newsomeresource());
var saved=Session.SaveOrUpdate(ent);
Session.Session.Flush();
Session.Session.Clear();
//后来。。。
var entToUpdate=Session.Get(saved.Id);
Add(“key2”,newsomeresource());
Session.SaveOrUpdate(entToUpdate);
Session.Session.Flush();
Session.Session.Clear();
谢谢您的回答。问题是我不想要一个全新的实体,我只想向现有实体的内部映射集合添加一个新项。那么为什么要创建一个新实体呢?您只需将新项添加到“ent”对象中。嗯,我不能)。我简化了很多上面的例子,在我的应用程序中我没有“ent”对象。我更新了代码,但是如果你想引用一个特定的对象,你需要知道它的ID。谢谢!是否可以在不从数据库中重新读取实体的情况下执行此操作?
var ent = new Entity();
ent.Resources.Add("key1", new SomeResource());
var saved = Session.SaveOrUpdate(ent);
Session.Session.Flush();
Session.Session.Clear();
// later...
var entToUpdate = Session.Get<Entity>(saved.Id);
ent.Resources.Add("key2", new SomeResource());
Session.SaveOrUpdate(entToUpdate);
Session.Session.Flush();
Session.Session.Clear();