2017-01-06 9 views
7

मैं SQL सर्वर 2016 में अस्थायी तालिकाओं का उपयोग कर सकता हूं। दुर्भाग्यवश इकाई फ्रेमवर्क 6 अभी तक इस सुविधा को नहीं जानता है। क्या एंटीटी फ्रेमवर्क 6 के साथ नए क्वेरीिंग विकल्पों का उपयोग करने के लिए वर्कअराउंड की संभावना है (msdn देखें)? enter image description hereमैं एंटिटी फ्रेमवर्क के साथ सिस्टम-वर्जनेड टेम्पोरल टेबल का उपयोग कैसे कर सकता हूं?

मैं (thanks to Matt Ruwe) संस्था के लिए तालिका मैप करने के लिए इस्तेमाल किया edmx: enter image description here

सब कुछ शुद्ध एसक्यूएल बयान के साथ ठीक काम करता है

मैं एक कर्मचारी अस्थायी तालिका के साथ एक सरल डेमो प्रोजेक्ट बनाया:

using (var context = new TemporalEntities()) 
{ 
    var employee = context.Employees.Single(e => e.EmployeeID == 2); 
    var query = $"SELECT * FROM [TemporalTest].[dbo].[Employee] FOR SYSTEM_TIME BETWEEN '0001-01-01 00:00:00.00' AND '{employee.ValidTo:O}' WHERE EmployeeID = 2"; 
    var historyOfEmployee = context.Employees.SqlQuery(query).ToList(); 
}  

क्या शुद्ध एसक्यूएल के बिना प्रत्येक इकाई को इतिहास कार्यक्षमता जोड़ना संभव है? IQuerable से एसक्यूएल क्वेरी में हेरफेर करने के लिए प्रतिबिंब के साथ इकाई विस्तार के रूप में मेरा समाधान सही नहीं है। क्या ऐसा करने के लिए कोई मौजूदा एक्सटेंशन या लाइब्रेरी है?

संपादित करें:

मैं एक टेबल-मान समारोह का उपयोग करने की कोशिश की (Pawel द्वारा टीका के आधार पर):

CREATE FUNCTION dbo.GetEmployeeHistory(@EmployeeID int, @startTime datetime2, @endTime datetime2) 
RETURNS TABLE 
AS 
RETURN 
(
    SELECT 
     EmployeeID, 
     [Name], 
     Position, 
     Department, 
     [Address], 
     ValidFrom, 
     ValidTo 
    FROM dbo.Employee 
    FOR SYSTEM_TIME BETWEEN @startTime AND @endTime 
    WHERE EmployeeID = @EmployeeID 
); 
using (var context = new TemporalEntities()) 
{ 
    var employee = context.Employees.Single(e => e.EmployeeID == 2); 
    var historyOfEmployee = context.GetEmployeeHistory(2, DateTime.MinValue, employee.ValidTo).ToList(); 
} 

मैं प्रत्येक इकाई के लिए एक समारोह बनाना होगा या क्या एक सामान्य विकल्प है?

+1

को V_View मानचित्र आप एक TVF का उपयोग कर विचार किया है? – Pawel

+0

सही इकाई प्रकार प्राप्त करना संभव है? इस उदाहरण में GetEmployeeHistory "अज्ञात" प्रकार के बजाय कर्मचारी को फिर से चालू करता है? – cSteusloff

+0

हां। सही इकाई प्रकार प्राप्त करना संभव है। मुझे अपने सिर के शीर्ष से याद नहीं है लेकिन डिजाइनर आपके टीवीएफ के लिए मॉडल में एक प्रकार जोड़ना चाहता है। आप यह नहीं चाहते हैं - आप मौजूदा प्रकार का उपयोग करना चाहते हैं। महत्वपूर्ण बात यह है कि टीवीएफ सही कॉलम लौटाता है ताकि संस्थाओं को पूरा करना संभव हो। – Pawel

उत्तर

-1

टेम्पोरल तालिका (इतिहास) के साथ दृश्य बनाएं और इस दृश्य को इकाई फ्रेमवर्क पर मानचित्र बनाएं।

ईजीएस:

CREATE VIEW V_View 
AS 
select * from hist.TableHistory 

और इकाई की रूपरेखा

+0

फिर आप डेटाटाँटेक्स्ट में इतिहास तालिका को मैप कर सकते हैं, मुझे दृश्य बिंदु नहीं दिख रहा है? –

+0

हाय @ जोर्ड्यवानइज, मुझे यकीन नहीं है कि ईएफ की वर्तमान रिलीज में टेम्पल टेबल को कोड या तो पहले या डीबी पहले लिंक करने का सीधा तरीका है। तो आपको कस्टम तरीके से करना होगा और इस बेहतर उपयोग से बचने के लिए देखें। कृपया मुझे अपनी टिप्पणी यहां बताएं। –

संबंधित मुद्दे