Ничего не происходит в SaveOrUpdate с использованием FluentNHibernate - PullRequest
0 голосов
/ 03 июня 2009

Ничего не происходит при обновлении объекта с помощью метода SaveOrUpdate с FluentNHibernate. Flush работает, но я хочу использовать SaveOrUpdate из-за существующей инфраструктуры репозитория. В чем может быть проблема?

Конфигурация:

sessionFactory = Fluently.Configure()
    .Database(MsSqlConfiguration
        .MsSql2005
            .ConnectionString(c => c.FromConnectionStringWithKey("repository")))
        .Mappings(m => m.FluentMappings
            .AddFromAssemblyOf<InvoiceMap>())
    .BuildSessionFactory();

Отображения:

public InvoiceMap()
{
    Id(x => x.InvoiceID, "InvoiceID");
    Map(x => x.InvoiceNumber);
    Map(x => x.InvoiceDate);
    Map(x => x.Company).CustomTypeIs<CompanyType>();
    Map(x => x.TransactionNumber).CustomTypeIs<TransactionNumberType>();
    Map(x => x.LongAddressBookNumber);
    Map(x => x.PurchaseOrderNumber);
    Map(x => x.ReceivedDateTime);
    Map(x => x.OCR);
    Map(x => x.DocumentNumber);
    Map(x => x.DocumentType);
    Map(x => x.PaymentStatus).CustomTypeIs<PaymentStatusType>();
    HasMany(x => x.Attestations)
        .KeyColumnNames.Add("InvoiceID")
        .Inverse()
        .Cascade.AllDeleteOrphan()
        .AsBag();
    HasMany(x => x.AttestationRequests)
        .KeyColumnNames.Add("InvoiceID")
        .Inverse()
        .Cascade.AllDeleteOrphan()
        .AsBag();
    HasMany(x => x.States)
        .KeyColumnNames.Add("InvoiceID")
        .Inverse()
        .Cascade.AllDeleteOrphan()
        .AsBag();
}

public AttestationMap()
{
    Id(x => x.ID, "AttestationID");
    Map(x => x.ReceivedAt);
    Map(x => x.IsInvalid, "Invalid");
    Map(x => x.InvalidationReason);
    Map(x => x.FileName);
    Map(x => x.FileData);
    References<EmployeeSnapshot>(x => x.Certifier, "Certifier")
        .Cascade.All()
        .FetchType.Join();
    References<Invoice>(x => x.Owner, "InvoiceID");
}

public AttestationReminderMap()
{
    Id(x => x.ID, "AttestationReminderID");
    Map(x => x.CC)
        .CustomTypeIs<RecipientType>();
    Map(x => x.Message);
    Map(x => x.SentAt);
    References<AttestationRequest>(x => x.Owner, "RequestID");
}

Есть идеи?

Спасибо, Кристоффер

Ответы [ 2 ]

2 голосов
/ 03 июня 2009

Когда вы говорите, что ничего не происходит, вы имеете в виду, что с БД ничего не происходит без сброса?

Если это так, то это ожидаемое поведение. Flush указывает NHib записать изменения, внесенные в память, в БД.

0 голосов
/ 03 июня 2009

Каким-то образом мне удалось установить для FlushMode сеанса значение Never. Это привело к необходимости явного вызова Flush, как описал мне Чад. Когда FlushMode оставил ему значение по умолчанию и, используя транзакцию, сущность обновляется, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...