【发布时间】:2010-12-01 12:45:47
【问题描述】:
我正在使用多对多映射表,将字段映射到对象。
相关数据库结构...
对象:表
(pk) 对象ID
[其他无关紧要]
字段:表格
(pk) 字段ID
[其余的无关紧要]
ObjectFields:表格
(pk) fieldObjectid
(fk) fkObjectId -> 对象
(fk) fkFieldId -> 字段
我的映射如下所示:
<bag name="Fields" table="ObjectFields" lazy="true" cascade="all">
<key column="fkObjectId"/>
<many-to-many class="Field" column="fkFieldId" />
</bag>
现在,所有收集操作都按您的预期工作 - 检索、添加和删除。但是,发生了一件非常奇怪的事情。如果我将一个对象添加到“字段”集合中,NHibernate 会删除已经存在的内容并重新插入它。
这是我的 log4net 转储:
DEBUG NHibernate.SQL [(null)] - 选择 this_.objectId 作为 objectId6_0_, this_.Name 作为 Name6_0_, this_.Description 作为 Descript3_6_0_, this_.RootElement 作为 RootElem4_6_0_, this_.ChildElement 作为 ChildEle5_6_0_, this_.ImageUrl 作为 ImageUrl6_0_, this_.hasChildren as hasChild7_6_0_, this_.CreateStamp as CreateSt8_6_0_ FROM Objects this_ WHERE this_.objectId = @p0;@p0 = 5 [类型:Int32 (0)]
调试 NHibernate.SQL [(null)] - 选择 fields0_.fkObjectId 作为 fkObjectId1_,fields0_.fkFieldId 作为 fkFieldId1_,inventoryf1_.fieldId 作为 fieldId4_0_,inventoryf1_.fieldName 作为 fieldName4_0_,inventoryf1_.fieldType 作为 fieldType4_0_,inventoryf1_.Required 作为Required4_0_ FROM ObjectFields fields0_ left外连接字段inventoryf1_ on fields0_.fkFieldId=inventoryf1_.fieldId WHERE fields0_.fkObjectId=@p0;@p0 = 5 [类型:Int32 (0)]
DEBUG NHibernate.SQL [(null)] - 选择 this_.fieldId 作为 fieldId4_0_, this_.fieldName 作为 fieldName4_0_, this_.fieldType 作为 fieldType4_0_, this_.Required 作为Required4_0_ FROM Fields this_ WHERE this_.fieldId = @p0;@p0 = 2 [类型:Int32 (0)]
调试 NHibernate.SQL [(null)] - 从 ObjectFields 中删除 fkObjectId = @p0;@p0 = 5 [类型:Int32 (0)]
DEBUG NHibernate.SQL [(null)] - INSERT INTO ObjectFields (fkObjectId, fkFieldId) VALUES (@p0, @p1);@p0 = 5 [Type: Int32 (0)], @p1 = 1 [Type: Int32 (0 )]
DEBUG NHibernate.SQL [(null)] - INSERT INTO ObjectFields (fkObjectId, fkFieldId) VALUES (@p0, @p1);@p0 = 5 [Type: Int32 (0)], @p1 = 2 [Type: Int32 (0 )]
如您所见,它发出删除语句,然后重新插入。
任何想法如何防止这种情况?
【问题讨论】:
标签: .net nhibernate