設定によりどちらのモカスケードなもの更新を関連団体
-
19-09-2019 - |
質問
私はその使用に堪能な設定によりどちらのモびそのautomapping機能への地図は、以下の簡易POCOクラス
public class Webpage
{
public virtual int Id { get; set; }
public virtual string UrlIdentifier { get; set; }
public virtual WebpageType WebpageType { get; set; }
}
public class WebpageType
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
私はそれをオーバーのマッピングを明示的に設定のないカスケードからページをWebpageType:
public class WebpageMap : IAutoMappingOverride<Webpage>
{
public void Override(AutoMapping<Webpage> mapping)
{
mapping.References(w => w.WebpageType).Cascade.None();
}
}
当シュ設定によりどちらのモダ、xmlのマッピングを作堪能:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="EveryPage.Core.Domain.Webpage, EveryPage.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Webpage`">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0">
<column name="Id" />
<generator class="identity" />
</id>
<property name="UrlIdentifier" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="UrlIdentifier" />
</property>
<many-to-one cascade="none" class="EveryPage.Core.Domain.WebpageType, EveryPage.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="WebpageType">
<column name="WebpageType_id" />
</many-to-one>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="EveryPage.Core.Domain.WebpageType, EveryPage.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`WebpageType`">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0">
<column name="Id" />
<generator class="identity" />
</id>
<property name="Name" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Name" />
</property>
</class>
</hibernate-mapping>
の問題が出た時は試験をもとに更新するなカスケードへのWebpageType経由ホームページは基本的にい!!
私は、以下の試験
[Test]
public void Assert_SaveOrUpdate_On_Webpage_Does_Not_Cascade_Update_To_WebpageType()
{
// Get the existing webpage.
webpage = _webpageRepository.Get("~/testwebpage1.aspx");
// Update the WebpageType.
const string webpageTypeName = "qwerty test";
webpage.WebpageType.Name = webpageTypeName;
// Save the changes.
Assert.DoesNotThrow(() => _webpageRepository.SaveOrUpdate(webpage));
// We need to flush the changes to the store for it to execute the changes.
Assert.DoesNotThrow(() => NHibernateSession.Current.Flush());
// Remove the webpage and tag from the level 1 cache so we force a trip to the store on our next check.
NHibernateSession.Current.Evict(webpage);
// Check that the webpageType has not been updated.
webpageType = _webpageTypeRepository.Get(webpageType.Id);
Assert.AreNotEqual(webpageTypeName, webpageType.Name);
}
上記の試験に包まれたグローバル-トランザクション.
この試験の場として設定によりどちらのモな実行と更新の名前に関連WebpageType.の削除、保存(新規)カスケードは正常に動作しないカスケード.
いmissunderstoodカスケードおよび/またはある問題私のロジック/テストです。
談-アドバイスよろしくお願いいたします。感謝。
解決
、私はマッピングで読み取り専用としてWebPageTypeをマークすることによって、これを達成するために簡単かつ安全になると思います。そして、あなたはそのすべての団体にカスケード接続の取り扱いを経由して、それを保護する必要はありません。
他のヒント
こういう誤解のカスケードします。
おとえば、設定によりどちらのモードを名前の物件でWebPageTypeな設定したカスケード。考えてみれば、あなたは何点ぐらいになると思の設定によりどちらのモ図書館かい操作における財産の価値を当協会ホームページよりインスタンスに必ず行う"直接"?
の設定をカスケードに設定によりどちらのモノとの関連団体の取り扱いにあたっては、どのように実際の値を内部エンティティをはかっています。例えば、設定の削除カスケードは、自動的に削除に関連団体が主体そのものが削除されています。
ものブログというのも少をより明確にし、少なくとも作品としての参考: http://ayende.com/Blog/archive/2006/12/02/NHibernateCascadesTheDifferentBetweenAllAlldeleteorphansAndSaveupdate.aspx
あなたのリポジトリには何をしますか?それはwebpagetypeにするsaveOrUpdateを実行していないことを確認します。それがない場合、私は、この動作のための任意の明白な説明が表示されません。