Удаление отношения "многие ко многим" с помощью Fluent Nhibernatev

Помогите, пожалуйста! Не могу удалить объекты и зависимости в таблицах Oid и CertRequest.

Я подписался:

Oid

общедоступный класс Oid {общедоступный виртуальный int Id {получить; защищенный комплект; }
public virtual int RowVersion {get; установленный; }
общедоступная виртуальная строка Code {get; установленный; } общедоступная виртуальная строка Имя {get; установленный; }}

public class OidMap : IAutoMappingOverride<Oid>
{
    public void Override(AutoMapping<Oid> mapping)
    {
        mapping.Map(c => c.Code).Not.Nullable().Unique();
        mapping.Map(c => c.Name).Not.Nullable().Length2000();
    }
}

CertRequest

public class CertRequest
{
    public virtual int Id { get; protected set; }  
    public virtual int RowVersion { get; set; }      
    public virtual string LastName { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string MiddleName { get; set; }
    public virtual ICollection<Oid> Oids { get; set; }
}

public class CertRequestMap : IAutoMappingOverride<CertRequest>
{
    public void Override(AutoMapping<CertRequest> mapping)
    {
        mapping.Map(c => c.LastName).Nullable().Length2000();
        mapping.Map(c => c.FirstName).Nullable().Length2000();
        mapping.Map(c => c.MiddleName).Nullable().Length2000();
        mapping.HasManyToMany(c => c.Oids)
            .Table("CertRequestToOid")
            .ParentKeyColumn("CertRequestId")
            .ChildKeyColumn("OidId");
    }
}

Удаление кода:

certRequest.Oids.Clear();

_certRequestRepository.SaveOrUpdate(certRequest);

_certRequestRepository.Delete(certRequest);

Ничего не делать.

Любая подсказка ...

ОБНОВЛЕНИЕ

Извините, я не сказал, что использую Sharp-Architecture и атрибут Transaction в методе.


person Artemoniks    schedule 05.09.2013    source источник
comment
Помогу сделать все операции в одной транзакции! Спасибо!   -  person Artemoniks    schedule 10.09.2013


Ответы (1)


_certRequestRepository объект типа ISession?

Если это так, вам нужно будет вызвать _certRequestRepository.Flush(), чтобы зафиксировать удаление в базе данных.

А еще лучше использовать транзакцию.

using(var transaction = _certRequestRepository.BeginTransaction())
{
    certRequest.Oids.Clear();
    certRequestRepository.Delete(certRequest);
    transaction.Commit();
}
person Andrew Shepherd    schedule 06.09.2013
comment
Извините, я не сказал, что использую Sharp-Architecture и атрибут Transaction в методе. - person Artemoniks; 06.09.2013