Şu anda DB'ye erişim için SP'leri kullanan eski bir sistemim var. Gördüğünüz gibi denetim bilgileri varlık kendisinden ayrılır, YaniNHibernate, bir mülkün bir alt seçime nasıl eşleştirileceği
CREATE PROCEDURE getUser
{
@ID int
}
select
Name
,(SELECT TOP 1 UserName FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedBy
,(SELECT TOP 1 DateStamp FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedDate
FROM [User]
WHERE [User].ID = @ID
:
public class User : EntityBase
{
public virtual string Name {get;set;}
public virtual string CreatedBy {get;set;}
public virtual DateTime CreatedDate {get;set;}
}
bu haritalı var SP şuna benziyordu: Alanım nesne şuna benzer database ve CreatedBy/CreatedOn (ve ModifiedBy/ModifiedOn), AuditTrail adlı ayrı bir tabloda saklanır. Tablodaki AuditActionID alanı, bir oluşturma/güncelleştirme olup olmadığını belirtir.
Bu eşleştirmeyi NHibernate ile nasıl kurabilirim? JOIN'e baktım ama bana ek değerler ile kısıtlama seçeneği sunmuyor (ve bir katılım istediğim şey değil).
Ayrıca, eğer Fluent NHibernate'de bu mümkün ise, bu bir ikramiyedir, ancak eğer beni oraya götürürse standart NHibernate eşleme yapılandırmasını denemekten iyidir.
GÜNCELLEME: Ben bunu yapmanın bir yolunu bulmuş, ama hayranı değilim
. Verileri okuyan ve bir nesneye geri döndüren bir SQLQuery kurdum. Çalışıyor, ancak bunu haritalama yoluyla yapmayı çok isterim. Eşleştirdiğim veritabanındaki "değerler" bir alt seçim ve düzenlenebilir olmadığından mümkün mü?
Çözüm:
Map(x => x.CreatedBy).Formula("(SELECT TOP 1 AuditTrail.UserName FROM AuditTrail WHERE AuditTrail.EntityID = [ID] AND AuditTrail.EntityName = 'User' AND AuditTrail.AuditActionID = 1 ORDER BY AuditTrail.DateStamp)");
Map(x => x.CreatedDate).Formula("(SELECT TOP 1 AuditTrail.DateStamp FROM AuditTrail WHERE AuditTrail.EntityID = [ID] AND AuditTrail.EntityName = 'User' AND AuditTrail.AuditActionID = 1 ORDER BY AuditTrail.DateStamp)");
sayesinde M