我無法得到NHibernate的在這一個一對一的關係Beneficiary
表AccountCode
列的AccountCode
列映射(每個Account
有一個單一的Beneficiary
,每個Beneficiary
有一個Account
)。地圖上查看自定義字段名稱 - 一個一對一的關係
類:
public class Account
{
...
public virtual string Name { get; protected set; }
public virtual string Code { get; protected set; }
}
public class Beneficiary
{
...
public virtual int Id { get; set; }
public virtual string Name { get; protected set; }
public virtual Account Account { get; protected set; }
public virtual BeneficiaryGroup Group { get; protected set; }
}
SQL:
CREATE VIEW dbo.Account AS
SELECT DISTINCT RTRIM(LTRIM(ACCNT_NAME)) AS Name,
RTRIM(LTRIM(ACCNT_CODE)) AS Code
FROM myremoteserver.schema.tablename
WHERE ACCNT_TYPE NOT IN ('B', 'P')
CREATE TABLE dbo.Beneficiary
(
Id INT IDENTITY(1,1) NOT NULL,
BeneficiaryGroupId INT NOT NULL CONSTRAINT FK_Beneficiaries_BeneficiaryGroup FOREIGN KEY REFERENCES dbo.BeneficiaryGroup (Id),
Name VARCHAR(100) NOT NULL,
AccountCode VARCHAR(100) NOT NULL,
CONSTRAINT PK_Beneficiary PRIMARY KEY (Id)
)
當試圖使用HasMany
和不同的變種,NHibernate的嘗試加入的Beneficiary.Id
列。
我試過的Map
,References
,Join
(它告訴我,加入已經存在)和HasMany
不同的變化(這失敗,由於工作的關係確實是一個對一個)。
如何讓NHibernate將這兩個類正確映射到它們的列?
在嘗試不同流利的映射,在我IAutoMappingOverride<Beneficiary>
,會發生以下情況:
mapping.HasOne(b => b.Account);
mapping.HasOne(b => b.Account).PropertyRef(sa => sa.Code);
mapping.HasOne(b => b.Account).PropertyRef(sa => sa.Code).ForeignKey("none");
生成的SQL使用Beneficiary.Id
領域而不是Beneficiary.AccountCode
。 (之前你問,我使用「無」,因爲Account
是一個視圖,它不能有一個鍵)。
mapping.Join("AccountCode", x => x.References(y => y.Account));
mapping.Join("Account", b => b.KeyColumn("AccountCode"));
結果在Tried to add join to table 'Account' when already added.
。
和:
mapping.Map(b => b.Account, "AccountCode");
mapping.Map(b => b.Account).ReadOnly().Column("AccountCode");
導致:
無法確定類型:.Account,版本= 1.0.0.0,文化=中立,公鑰=空,爲列: NHibernate.Mapping.Column(AccountCode)
mapping.References(b => b.Account).Column("Code");
結果在Invalid column name 'Code'.
。
和:
mapping.References(b => b.Account).Column("AccountCode");
mapping.References(b => b.Account).Column("AccountCode").Access.Property();
覆蓋所有我IReferenceConvention
覆蓋(映射一些類有<class name>Code
鍵列)。
當試圖HasMany
:
mapping.HasMany<Account>(b => b.Account).KeyColumn("AccountCode");
自定義類型沒有實現UserCollectionType。賬戶
版本中,如果重要的:NHibernate的3.3.1.4000,FluentNHibernate 1.3.0.733。 – Oded