我正試圖在現有的數據庫之上構建一個新的應用程序。
通過單獨的系統檢索用戶憑證,並將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
我的問題是更多的工作要做與實體沒有財產(在這種情況UserID)映射到存儲過程中的調用。我認爲我可以通過添加具有額外UserID屬性的部分類(Pulse)來「欺騙」EF,但EDM設計器和模型瀏覽器不會顯示部分類其他部分的屬性。 –
啊。你的問題一點也不清楚。不,我認爲這種設計不適用於EF。你可以使用'ObjectContext.ExecuteStoreCommand'工作,但對我來說這似乎很笨拙。 –
我已經改變了這個問題,使它更清楚我所問的。我希望避免太多的'混亂',但也許這是不可能的。 –