2012-04-14 19 views
0

を挿入カスケード私は次のコードを持っている:それは上で壊れるFluentNHibernate -

// setup 
    var sessionFactory = SessionManager.CreateSessionFactory(true); 

    // business 
    using (var session = sessionFactory.OpenSession()) 
    { 
    using (var tran = session.BeginTransaction()) 
    { 
     var user1 = new UserDto() {Email = "[email protected]", FirstName = "FN1", LastName = "LN1"}; 
     var user2 = new UserDto() {Email = "[email protected]", FirstName = "FN2", LastName = "LN2"}; 

     var projType1 = new ProjectTypeDto() {ProjectTypeName = "ptn1", ProjectTypeDescription = "ptd1"}; 

     var timeSheet1 = new TimeSheetDto(){ Comment = "c1", User = user1, ProjectType = projType1 }; 
     var timeSheet2 = new TimeSheetDto(){ Comment = "c2", User = user2, ProjectType = projType1 }; 

     session.SaveOrUpdate(timeSheet1); 
     session.SaveOrUpdate(timeSheet2); 

     tran.Commit(); 
    } 
    } 

"をtran.Commit();"ライン。

例外では、timeSheetはNotExistentユーザーを指しています。 (それは明らかです)

どのように自動的に関連オブジェクトを追加するには?

私は、次のマッピングを使用しています:

public class TimeSheetMap : ClassMap<TimeSheetDto> 
    { 
    public TimeSheetMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.StartTime); 
     Map(x => x.EndTime); 
     Map(x => x.Comment); 
     References(x => x.User).Cascade.All(); 
     References(x => x.ProjectType).Cascade.All(); 
    } 
    } 
+0

UserDtoクラスマップを表示すると、なぜsession.Save(timeSheet1);を使用しないのですか?私はInverseで問題が解決できると思いますが、あなたのクラスマップを待っています –

答えて

1

あなたがそうでなければ、両側を保存し、逆を使用して親に片側を宣言する必要があります。

public class TimeSheetMap : ClassMap<TimeSheetDto> 
    { 
    public TimeSheetMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.StartTime); 
     Map(x => x.EndTime); 
     Map(x => x.Comment); 
     References(x => x.User).Cascade.All().Inverse(); 
     References(x => x.ProjectType).Cascade.All().Inverse(); 
    } 
    } 
関連する問題