NHibernate:无法将项目附加到映射元素

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=

我的映射中有map元素-

        <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();