【发布时间】:2011-03-30 04:19:48
【问题描述】:
我正在尝试使用非主字段对 2 个表进行一对一连接。 我在数据库中有 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 表中检索一行时,我基本上都需要 Branch Name。 我想我可以在 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 个表时,是否有更好的解决方案?
提前感谢您的任何建议和建议, 祝你有美好的一天!
【问题讨论】:
-
关系 Branch Has Many Salesman 和 Salesman References (
Branch 不适合你吗?Salesman 实体可以直接引用 Branch 对象。 -
@WorldIsRound:+1 好主意!在我的回答中,我什至没有想到它! =)
-
您好 WorldlsRound,您能否详细说明您的
解决方案。我是否将 标记放置在 salesman 映射文件中并将 放置在分支映射文件中?我不明白这想让 nhiberate 知道如何匹配 BranchID。
标签: c# sql-server nhibernate