0

私は次のコードを持っています:

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

  // business
  using (var session = sessionFactory.OpenSession())
  {
    using (var tran = session.BeginTransaction())
    {
      var user1 = new UserDto() {Email = "e1@ma.il", FirstName = "FN1", LastName = "LN1"};
      var user2 = new UserDto() {Email = "e2@ma.il", 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();
    }
  }
4

1 に答える 1

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();
    }
  }
于 2012-04-15T03:16:47.383 に答える