ala*_*irs 0 nhibernate nhibernate-mapping
继续我在我的播客应用程序中对NHibernate的探索,我遇到了一些奇怪的事情:当我期望INSERT时,NHibernate正在更新.情况是播客与其项目之间的简单的一对多关系.这是我的NHibernate映射:
<hibernate-mapping assembly="App.DataModel">
<class name="Feed" table="Feeds">
<!-- snip -->
<bag name="FeedItems" table="FeedItems" cascade="all">
<key column="FeedId" />
<one-to-many class="FeedItem" />
</bag>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
情况是:我创建了一个新Podcast对象,从feed更新它(所以Podcast.FeedItems集合属性包含许多FeedItems),现在我将它保存到数据库中ISession.Save().根据NHibernate日志文件判断,该Podcast对象已正确插入数据库,但该FeedItems集合正在UPDATEd中.这是为以下内容生成的SQL Podcast:
INSERT INTO Feeds (
Uri, IsPublic, Title, Description, Link, Language, Copyright,
LastBuildDate, PublishDate, Docs, Webmaster, Author, Subtitle,
Summary, OwnerName, OwnerEmail, IsExplicit, ImageUri, Id
) VALUES (
@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11,
@p12, @p13, @p14, @p15, @p16, @p17, @p18
);
Run Code Online (Sandbox Code Playgroud)
这是为FeedItems 生成的SQL :
UPDATE FeedItems SET PublishDate = @p0, Author = @p1,
IsExplicit = @p2, Subtitle = @p3, Summary = @p4,
Duration = @p5 WHERE Id = @p6;
Run Code Online (Sandbox Code Playgroud)
当FeedItems还不一定存在时,我不明白为什么会发生UPDATE .我正在追逐它,因为执行此代码的测试失败了,例外
NHibernate.StaleStateException: Unexpected row count: 0; expected: 1
使用更多日志记录进行更新:在进行了一些更多调整之后,我在NHibernate日志中发现了以下行:
Collection found: [Podcast.FeedItems#GUID], was: [<unreferenced>] (initialized)
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |