क्या कॉलम को गंदे के रूप में इलाज करने के लिए LINQ-to-SQL को मजबूर करने का कोई तरीका है? वैश्विक स्तर पर पर्याप्त होगा ....क्या आप कॉलम को हमेशा गंदा के रूप में मानने के लिए डेटा कॉन्टेक्स्ट को समझ सकते हैं?
मूल रूप से, मैं एक विरासत प्रणाली है कि मैं L2S के साथ बात कर रहा हूँ पर कुछ लेखा परीक्षा कोड के साथ एक समस्या है, कल्पना:
var ctx = new SomeDataContext(); // disposed etc - keeping it simple for illustration
var cust = ctx.Customers.First(); // just for illustration
cust.SomeRandomProperty = 17; // whatever
cust.LastUpdated = DateTime.UtcNowl;
cust.UpdatedBy = currentUser;
ctx.SubmitChanges(); // uses auto-generated TSQL
यह ठीक है, लेकिन एक ही उपयोगकर्ता इसे दो बार अपडेट हो जाता है, तो एक पंक्ति में, UpdatedBy
एक एनओपी है, और TSQL हो जाएगा (लगभग):
UPDATE [dbo].[Customers]
SET SomeRandomColumn = @p0 , LastUpdated = @p1 -- note no UpdatedBy
WHERE Id = @p2 AND Version = @p3
मेरे मामले में, समस्या यह है कि वर्तमान में एक बेल्ट और ब्रेसिज़ है सभी तालिकाओं पर ऑडिट ट्रिगर, जो यह देखने के लिए जांच करता है कि ऑडिट कॉलम अपडेट किया गया है, और यदि नहीं मानता है डेवलपर गलती पर है (SUSER_SNAME()
को प्रतिस्थापित कर रहा है, हालांकि यह आसानी से एक त्रुटि फेंक सकता है)।
जो मैं वास्तव में करना चाहता हूं वह कहता है "हमेशा इस कॉलम को अपडेट करें, भले ही यह गंदा न हो" - क्या यह संभव है?
मुझे यकीन नहीं है कि मैं प्रश्न (शायद नहीं) समझता हूं। आप इसका उपयोग नहीं कर सकते: आंशिक शून्य ऑनलोडेड() {this.UpdatedBy = currentUser; } तो यह हमेशा अपडेटेडबी सेट करता है? – Razzie
यदि अपडेटेडबी को वास्तविक परिवर्तन के रूप में नहीं देखा जाता है (क्योंकि यह पिछली बार के समान मूल्य है), तो उस कॉलम के लिए 'अपडेट' नहीं होता है। –
हम्म मैन्युअल रूप से इकाई को संलग्न करके ऐसा नहीं कर सका? पहले कभी नहीं किया, लेकिन मेरा मानना है कि यह डिफ़ॉल्ट रूप से सभी कॉलम अपडेट करता है। Http://blogs.rev-net.com/ddewinter/2009/04/07/linq-to-sql-updating-entities/ विशेष रूप से दूसरा अध्याय देखें। – Razzie