2011-09-22 64 views
0

我正試圖在現有的數據庫之上構建一個新的應用程序。
通過單獨的系統檢索用戶憑證,並將GUID返回給標識用戶的客戶端應用程序,但該數據庫使用bigInt進行用戶標識,以解決數據庫中的每個SP使用映射功能來發現本地UserIdentity基於傳入SP的GUID(用戶ID)。
我想使用EF(.Net4.0),但我看不到一種方法將GUID傳遞到SP中,以允許DB映射函數確定本地UserIdentity。
爲返回集合映射SP工作正常,接收GUID,派生本地UserIdentity並返回'pulse'記錄集。更新和刪除都很好,因爲它們可以使用實體自己的Id值。複雜插入存儲過程不適合EF?

我想我真正的問題是「如果SP映射到的實體不包含具有該值的屬性,是否有將值發送到存儲過程的方法?」

下面是一個典型的表(EF實體具有相同的屬性),它對應於Insert SP。

CREATE TABLE [dbo].[Pulse](
    [Id] [bigint] IDENTITY(1,1) NOT NULL, 
    [UserIdentity] [bigint] NOT NULL, 
    [Recorded] [datetime] NOT NULL, 
    [Value] [int] NOT NULL, 

插入SP看起來像這樣

ALTER PROCEDURE [dbo].[Pulse_Insert] @userId uniqueIdentifier, @recorded datetime, @pulse int AS 
BEGIN 
SET NOCOUNT ON; 
     declare @userIdentity bigint 
     select @userIdentity = dbo.GUIDUserMapping(@userId) 
     insert into dbo.Pulse (UserIdentity, recorded, value) 
     values(@userIdentity,@recorded,@pulse) 
     END 

回答

0

這不是 「不適合EF,」 但如果你使用一個進程的一個操作(INSERT/UPDATE/DELETE/SELECT」的EF預期您可以使用特效爲其他。

那豈不是更容易使用INSTEAD OF觸發器,在這裏嗎?那麼EF不會需要了解它。

+0

我的問題是更多的工作要做與實體沒有財產(在這種情況UserID)映射到存儲過程中的調用。我認爲我可以通過添加具有額外UserID屬性的部分類(Pulse)來「欺騙」EF,但EDM設計器和模型瀏覽器不會顯示部分類其他部分的屬性。 –

+0

啊。你的問題一點也不清楚。不,我認爲這種設計不適用於EF。你可以使用'ObjectContext.ExecuteStoreCommand'工作,但對我來說這似乎很笨拙。 –

+0

我已經改變了這個問題,使它更清楚我所問的。我希望避免太多的'混亂',但也許這是不可能的。 –