2013-09-25 82 views
1

我有一個PayrollProcessingProgress表,它有一個主鍵,另一個表PayrollPeriod的ID。它不是一對一的映射,因爲PayrollPeriod具有1或0的PayrollProcessingProgresses。我的NHibernate映射有什麼問題?

我映射

public class PayrollProcessingProgressMap : ClassMap<PayrollProcessingProgress> 
{ 
public PayrollProcessingProgressMap() 
{ 
    Table("PayrollProcessingProgress"); 

    Id(x => x.PayrollPeriodId).GeneratedBy.Foreign("PayrollPeriodId"); 

    Map(x => x.RecordsProcessed); 
} 
} 

爲表

CREATE TABLE [dbo].[PayrollProcessingProgress](
    [PayrollPeriodId] [uniqueidentifier] NOT NULL, 
    [RecordsProcessed] [int] NOT NULL, 
CONSTRAINT [PK_PayrollProcessingProgress] PRIMARY KEY CLUSTERED 
(
    [PayrollPeriodId] ASC 
) 
) 

GO 

ALTER TABLE [dbo].[PayrollProcessingProgress] WITH CHECK ADD CONSTRAINT [FK_PayrollProcessingProgress_PayrollPeriods] FOREIGN KEY([PayrollPeriodId]) 
REFERENCES [dbo].[PayrollPeriods] ([Id]) 
GO 

ALTER TABLE [dbo].[PayrollProcessingProgress] CHECK CONSTRAINT [FK_PayrollProcessingProgress_PayrollPeriods] 
GO 

我可以閱讀<>和更新我的DB手動保存成功的實體數量的字段,但是當我嘗試

Save(new PayrollProcessingProgress{ 
PayrollPeriodId = [Guid I know to be a valid payrollperiodid], 
RecordsProcessed = 0 
} 

我收到「Unable to resolve property:PayrollPeriodId」

+1

看一看[這個答案](http://stackoverflow.com/questions/1398487/fluent-nhibernate-problem-mapping-id) –

回答

1

你必須定義的主要實體的引用使用從ID或者將其定義爲簡單keyreference

public PayrollProcessingProgress 
{ 
    public virtual PayrollPeriod Period { get; set; } 
    public virtual int RecordsProcessed { get; set; } 
} 

public PayrollProcessingProgressMap() 
{ 
    CompositeId().KeyReference(x => x.Period, "PayrollPeriodId"); 

    Map(x => x.RecordsProcessed); 
} 

另一種可能性是將其對應爲在主類ANS使用聯合映射爲空的屬性。然而,你不能刪除RecordsProcessed記錄了

public PayrollPeriod 
{ 
    ... 
    public virtual int? RecordsProcessed { get; set; } 
} 

public PayrollPeriodMap() 
{ 
    Join("PayrollProcessingProgress", join => 
    { 
     join.KeyColumn("PayrollPeriodId"); 
     join.Optional(); 
     join.Map(x => x.RecordsProcessed); 
    }); 
}