在FluentNHibernate中使用SaveOrUpdate方法更新实体时不会发生任何操作。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");
}有什么想法吗?
谢谢,克里斯托弗
发布于 2009-06-02 21:01:05
当你说什么都没有发生的时候,你的意思是如果不刷新数据库,什么都不会发生?
如果是这样,这是预期的行为。Flush告诉NHib将它在内存中的更改写入DB。
发布于 2009-06-03 17:15:03
不知何故,我设法将会话的FlushMode设置为Never。正如查德向我描述的那样,这导致需要显式地调用Flush。当FlushMode将其保留为默认值时,并使用事务,实体将按预期更新。
https://stackoverflow.com/questions/941843
复制相似问题