Fluent Nhibernate:无法删除具有HasMany属性的项目

时间:2012-05-08 03:54:24

标签: fluent-nhibernate

我通常不处理这样的数据,但我认为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代码,但我认为不需要它。

我正在尝试在我的服务层中编写一个非常简单的删除方法:

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]

我不知道为什么它最终会尝试更新,但我想这就是造成这个问题的原因。我有什么样的追索权?

感谢。

1 个答案:

答案 0 :(得分:3)

由于DateTypeTrack已经关注两个实体之间的关联,你应该将HasMany标记为Inverse告诉NH,hasmany不会维护它(更新)

HasMany(x => x.TrackDates).KeyColumn("TrackID").Cascade.All().Inverse();