NHibernate存储过程命名

NHibernate存储过程命名,nhibernate,stored-procedures,naming-conventions,Nhibernate,Stored Procedures,Naming Conventions,我正在将遗留系统的数据层转换为使用NHibernate。旧数据库加载了我要映射的存储过程。我被事物的命名弄得心烦意乱。这些过程不会返回简单的实体,它们返回的是一团混乱。例如: USE [MYDB] GO /****** Object: StoredProcedure [dbo].[GetInvoiceRenewals] Script Date: 06/21/2012 10:24:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIE

我正在将遗留系统的数据层转换为使用NHibernate。旧数据库加载了我要映射的存储过程。我被事物的命名弄得心烦意乱。这些过程不会返回简单的实体,它们返回的是一团混乱。例如:

USE [MYDB]
GO
/****** Object:  StoredProcedure [dbo].[GetInvoiceRenewals]    Script Date: 06/21/2012    10:24:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[GetInvoiceRenewals]
@ClientId int,
@UserId int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


IF (@ClientId IN (SELECT ClientId FROM dbo.UserClientIds(@UserId)))
BEGIN

    SELECT I.InvoiceId, I.ClientId, I.InvoiceTypeId, I.InvoiceNumber, I.QuoteNumber, I.PONumber,
        I.TotalListPrice, I.EstimatedFee, I.ActualFee, I.DateCreated, u.firstname + ' ' + u.lastname as 'UserCreated',i.billingAddressID,i.shippingAddressID,
        I.ActualClientPrice,
        (select InvoiceStatus from InvoiceStatus where invoiceStatusID = (Select Case When Not Exists (Select * from InvoiceStatusHistory where InvoiceId=I.InvoiceID) Then 1
Else (Select top 1 InvoiceStatusID from InvoiceStatusHistory where InvoiceId=I.InvoiceID Order By ActionDate Desc) End)) as Status
    FROM Invoice I, [user] u
    WHERE I.ClientId = @ClientId AND I.IsActive = 1 AND I.InvoiceTypeId = 3 and u.userID = i.userCreated

END
END


--Select Case When Not Exists (Select * from InvoiceStatusHistory where    InvoiceId=I.InvoiceID) Then 1
--  Else (Select InvoiceStatusID from InvoiceStatusHistory where InvoiceId=I.InvoiceID)    End
--
--InvoiceStatusID is NULL then 1 else InvoiceStatusID END from InvoiceStatusHistory 
--                          where InvoiceId=1860 Order By    ActionDate Desc

现在想象一下成百上千的这样。我显然要编写一个脚本,将所有这些生成到hbm文件中,并创建实体。我要找的是这些proc实体的良好命名结构?有什么想法吗?

我不认为NHibernate真的适合这个。如果要将其转换为NHibernate,那么应该将实体大致映射到表,而不是存储的过程

在本例中,您的存储过程中也有逻辑,imo最好用代码表示,这需要将实体映射到表并从这些实体开始工作


由于您希望迁移到NHibernate,我建议您将实体映射到表,然后分步骤将应用程序迁移到使用实体,如果您愿意,请保持使用存储过程的状态,您可以始终使用session.CreateSQLQuery…调用存储过程。

我希望取消所有存储过程。我的方法是缓慢迁移,使用NHibernates CreateSQLQuery将整个数据层转换为NHibernate,包括旧的过程。一旦我运行了所有东西,我就能够慢慢地开始在linq中获取所有东西,并从存储的进程中提取业务逻辑。同样,我只是想为我将要映射存储过程的实体命名。