2011-04-05 14 views
1

私の問題は、1対多の関係からオブジェクトを削除すると、子レコードは削除されずに孤立してしまうということです。私はそれが私のドメインモデルを設定したかどうか、または私は自動マップ設定中に何かを設定していないかどうかは分かりません。鑑定 - >選手権の関係は、孤立した記録が出ているところです。それらはShortlistMentorテーブルとShortListQuestionResponseテーブルの両方で発生します。私が期待するのは、関係からShortlistMentorを削除すると、それがShortlistMentorテーブルから削除され、ShortListQuestionResponseテーブルのエントリも削除されるということです。流暢Nhibernate 1つから多くの孤立したレコード

public class Appraisal : BaseEntity 
{ 
    public Appraisal() 
    { 
     ShortlistedMentors = new List<ShortlistedMentor>(); 
     ApprovedMentor = new User(); 
     College = new RefData(); 
    } 

    #region Primitive Properties 

    public virtual bool Decision { get; set; } 
    public virtual System.DateTime? ApprovedDate { get; set; } 
    public virtual System.DateTime? AcceptedDate { get; set; } 
    public virtual System.DateTime? CompletionTargetDate { get; set; } 
    public virtual string RejectionReason { get; set; } 

    public virtual IList<ShortlistedMentor> ShortlistedMentors { get; set; } 

    public virtual User ApprovedMentor { get; set; } 

    public virtual RefData College { get; set; } 

}

アップ

.Mappings 
(
m => 
m.AutoMappings.Add 
(
    AutoMap.AssemblyOf<User>(cfg) 
    .Override<Client>(map =>{map.HasManyToMany(x => x.SICCodes).Table("SICRefDataToClient");}) 
    .IgnoreBase<BaseEntity>() 
    .Conventions.Add(new StringColumnLengthConvention(),new EnumConvention(),DefaultCascade.SaveUpdate()) 
    .Conventions.Add(DefaultLazy.Always()) 
) 

オートマップセットこのヘルプ場合はわからないが、これは私がコレクションから項目を削除し、

新しいを追加している方法です
ProjectToUpdate.Appraisal.ShortlistedMentors.Clear(); 
      foreach (var userId in Request.Form["ProjectToEdit.Appraisal.ShortlistedMentors"].Split(',')) 
      { 
       var user = _membershipService.GetUser(Convert.ToInt16(userId)); 
       ProjectToUpdate.Appraisal.ShortlistedMentors.Add(new ShortlistedMentor(){Mentor = user,ShortListQuestionResponses = new List<ShortListQuestionResponse>()}); 

      } 

答えて

1

あなたのDefau ltCascadeはHasMany関係(ShortlistedMentors)をCascade.AllDeleteOrphanに上書きする必要があるSaveUpdate()に設定されています。だから、これは次のようになります:

.Override<Appraisal>(map =>{map.HasMany(x => x.ShortlistedMentors).Cascade.AllDeleteOrphan();}) 

実際にはコンパイルされていないので完全ではありません。

+0

私はそれを試してみましたが、SHortlistedMentorsコレクションにエントリを追加しようとすると次のエラーが発生します "所有しているエンティティインスタンスによってcascade =" all-delete-orphan " Poco.Appraisal.ShortlistedMentors " – Simon

+0

このエラーメッセージは、コレクションの参照を削除してはいけないことを示している可能性があります。これらの2つの記事を参照して、この問題を解決できるかどうかを確認してください:[here](http://stackoverflow.com/questions/2127016/nhibernate-mapping-a-collection-with-cascade-all-delete-orphan -was-no-longer-r)と[here](http://www.sleberknight.com/blog/sleberkn/entry/20070329) –

+0

私はこれを投稿する前に最初の記事を読んでいました。コレクションをクリアすることによって提案されたハッシュClear()を実行し、新しい要素を追加しなおしますが、まだエラーが表示されます。 – Simon

関連する問題