2012-06-21 3 views
0

Я конвертирую слой данных устаревшей системы, чтобы использовать NHibernate. Старый db загружен хранимыми пробами, которые я хочу отобразить. Меня раздирают имена вещей. Эти procs не возвращают простые сущности, они возвращают беспорядок. Примером может служить примерно следующее:NHibernate Stored Proc Именование

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? Есть предположения?

ответ

1

Я не думаю, что NHibernate действительно подходит для этого. Если вы конвертируете его в NHibernate, тогда вы должны действительно сопоставить свои объекты с таблицами (грубо), а не с хранимыми процедурами.

Также в этом примере у вас есть логика в вашем сохраненном proc, который, imo, будет лучше выражен в коде, что потребует сопоставления сущностей с таблицами и работы с этими объектами.

Поскольку вы хотите перенестись в NHibernate, я бы предложил сопоставить объекты в таблицах, а затем перенести приложение пошагово, чтобы использовать сущности, и оставить его как есть, используя хранимые procs (если вы хотите, вы всегда можете вызвать сохраненный procs using session.CreateSQLQuery ("..."))

+0

Я хочу избавиться от всех хранимых процедур. Мой подход - медленная миграция, преобразование всего уровня данных в NHibernate, включая старые procs, с использованием NHibernates CreateSQLQuery. Как только у меня все будет работать, я смогу постепенно начать получать все в linq и вырвать бизнес-логику из хранимых процедур. Опять же, я просто ищу имена для объектов, на которые я буду сопоставлять сохраненные procs. –

Смежные вопросы