我正在尝试使用非主要字段与2个表进行一对一连接。 我在DB中有2个表。
CREATE TABLE [dbo].[Branch](
[BranchID] [int] IDENTITY(1,1) NOT NULL,
[Branch_Name] [nvarchar](100) NULL)
CREATE TABLE [dbo].[Salesman](
[SalesmanID] [int] IDENTITY(1,1) NOT NULL,
[BranchID] [int] NOT NULL,
[First_Name] [nvarchar](30) NULL,
[Last_Name] [nvarchar](30) NULL)
每当我从salesman表中检索一行时,我基本上都需要分支名称。 我以为我可以在Salesman.hbm.xml文件中添加一个连接。
<join table="dbo.Branch">
<key column="BranchID" />
<property lazy="true" update="false" insert="false" not-null="false" type="String" name="Branch_Name" />
</join>
这不起作用,因为nHibernate总是使用主键创建连接。我读了一些其他帖子,他们建议在这种情况下使用视图。所以我创建了一个类似的视图:
create view dbo.VIEW_Salesman As
SELECT a.[SalesmanID], a.[BranchID], a.[First_Name],a.[Last_Name],
(select [Branch_Name] FROM [dbo].[Branch] WHERE BranchID= a.[BranchID]) As Branch_Name
FROM [dbo].[Salesman] as a
上述视图实际上有效,但是当您想要使用非主要字段连接2个表时,是否有更好的解决方案?
提前感谢您的任何建议和意见, 祝你有美好的一天!
答案 0 :(得分:0)
您可以使用实际与NHibernate无关的Dependancy Injection,并且肯定会强制更改映射文件,或者可能在NHibernate配置文件中使用命名查询。
此外,我只是认为您在使用Dependancy Injection时可能会使用复合映射。
Salesman s = new Salesman(branchInstance)
因此,您的Salesman类中应该有一个Branch属性,可以让您知道此销售人员所属的分支名称。否则,只需要一个BranchName属性,该属性实际上将返回branchInstance.Name
属性值。
使用NHibernate查看以下有关组件映射的内容:
或者如果你更喜欢使用NHibernate将它作为一个视图,也许一个命名查询应该用更少的更改来完成它:
希望这有帮助!不要犹豫,询问更多细节,如果可以的话,我很乐意帮助你! =)