1

私は通常このようなデータを扱いませんが、idで試してみようと思いました。結局のところ、私は失敗しました:/そしてどのように進めるかがわかりません。

私はデータベースオブジェクトトラックを持っています:

public virtual string Type { get; set; }

public virtual IList<DateTypeTrack> TrackDates { get; set; }

マッピングファイルの場合:

Table("Tracks");
Map(x => x.Type).Not.Nullable();
HasMany(x => x.TrackDates).KeyColumn("TrackID").Cascade.All();

DateTypeTrackオブジェクトは次のようになります。

public virtual DateType DateType { get; set; }
public virtual Track Track { get; set; }
public virtual int Days { get; set; }

このようなマッピングファイルを使用すると、次のようになります。

Table("DateTypeTracks");
References(x => x.DateType, "DateTypeID").Not.Nullable();
References(x => x.Track, "TrackID").Not.Nullable();
Map(x => x.Days).Not.Nullable();

必要に応じて、DateTypeコードも投稿しますが、必要だとは思いません。

そして、非常に単純なdeleteメソッドをサービスレイヤーに書き込もうとしています。

public void PushDelete(int id)
    {
        Track track = _tracks.Get(id);

        try
        {
            _tracks.BeginTransaction();
            _tracks.Delete(track);
            _tracks.CommitTransaction();
        }
        catch (Exception)
        {
            _tracks.RollbackTransaction();
            throw;
        }
    }

エラーが発生し続けます:

could not delete collection: [TSE.Domain.DatabaseObjects.Track.TrackDates#12][SQL: UPDATE DateTypeTracks SET TrackID = null WHERE TrackID = @p0]

最後に更新を試みた理由はわかりませんが、それが問題の原因だと思います。どのような手段がありますか?

ありがとう。

4

1 に答える 1

3

DateTypeTrackすでに2つのエンティティ間の関連付けを考慮しているため、HasManyにマークを付けて、InverseHasmanyがそれを維持していないことをNHに通知する必要があります(更新)

HasMany(x => x.TrackDates).KeyColumn("TrackID").Cascade.All().Inverse();
于 2012-05-08T07:22:13.340 に答える