के लिए पुनर्प्राप्ति डेटाटाइप बदलें मैं वर्तमान में एक परियोजना को परिवर्तित करने की कोशिश कर रहा हूं जो वर्तमान में एंटिटी फ्रेमवर्क का उपयोग करने के लिए कस्टम डीएओ फ्रेमवर्क का उपयोग कर रहा है। प्रणाली काफी बड़ी है इसलिए डेटाबेस में परिवर्तन (एक एसक्यूएल एज़ूर डीबी अगर यह मायने रखता है) खुद को विशेष रूप से व्यवहार्य नहीं है और यदि संभव हो तो इससे बचा जाना चाहिए।सी #: इकाई फ्रेमवर्क
समस्या आईडी कॉलम के साथ है। दुर्भाग्य से जब सिस्टम बनाया गया था, तो कुछ टेबल हैं जिनमें bigint
डेटाटाइप है, और कुछ जिनमें int
है - लेकिन मॉडल स्वयं आईडी के लिए long
वाले बेस क्लास से आते हैं। पिछला ढांचा इस स्थिति को संभालने में सक्षम था, लेकिन मैं इकाई ढांचे के साथ ऐसा करने का कोई तरीका नहीं ढूंढ पाया।
नीचे सबसे छोटी उदाहरण मैं के बारे में सोच सकता है:
The 'ID' property on 'BaseClass' could not be set to a 'Int32' value. You must set this property to a non-null value of type 'Int64'.
मैं एक खोजने के लिए करना चाहते हैं:
public class Context : DbContext {
public IDbSet<Foo> Foos {get;set;}
public IDbSet<Bar> Bars {get;set;}
}
public abstract class BaseClass {
public long ID;
}
public class Foo : BaseClass {
...
}
public class Bar : BaseClass {
...
}
SQL Table: Foo
+-------------+
| id : bigint |
| ... |
+-------------+
SQL Table : Bar
+-------------+
| id : int |
| ... |
+-------------+
जब मैं एक Bar
मॉडल लोड करने का प्रयास है, मैं इस त्रुटि मिलती है प्रणाली को बताने का तरीका है कि बार में इंट्स हैं, जबकि फू लंबे समय तक है। मैंने संदर्भ में OnModelCreating
ओवरराइड करने और Bar
के लिए HasColumnType
को परिभाषित करने का प्रयास किया है।
Schema specified is not valid. Errors:
(105,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.Int64[Nullable=False,DefaultValue=]' of member 'ID' in type 'Bar' is not compatible with 'SqlServer.int[Nullable=False,DefaultValue=,StoreGeneratedPattern=Identity]' of member 'ID' in type 'CodeFirstDatabaseSchema.Bar'.
यह है कि अगर मैं केवल सर्वर से अनुरोध भेजने से पहले int
को BaseClass
की ID
के लिए अपेक्षित डेटा प्रकार को बदल सकता है, तो मैं करने में सक्षम ऊपर होना चाहिए मुझे लगता है: यह मेरे लिए एक नया त्रुटि दे दी है प्रतिक्रिया प्राप्त करने के बाद long
पर कनवर्ट करें। आदर्श रूप से, मैं इसे प्रति-वर्ग के आधार पर करना चाहता हूं।
क्या कोई मुझे सही दिशा में इंगित कर सकता है?
हाँ - यही वह है जो मुझे डर था। मुझे पता है कि मैं एक और गलत के साथ गलत तय करने की कोशिश कर रहा हूं। मैं बस उम्मीद कर रहा था कि मैं कुछ छोटी सी चालों के साथ बड़े व्यापक परिवर्तनों से बचने में सक्षम हूं। मैंने जो कुछ भी कोशिश की है वह काम नहीं कर रहा है इसलिए मुझे लगता है कि मैंने खुद को जो कुछ भी सिफारिश की है, उसे करने के लिए खुद को इस्तीफा दे दिया है। यदि कोई बेहतर समाधान नहीं आ रहा है, तो मैं इसे सही के रूप में चिह्नित करूंगा। – Merwer
@Merwer कभी-कभी, सच्चाई दर्द होता है, कृपया मैसेंजर को शूट न करें =) – casperOne
हाय @ कैस्परऑन मेरे प्रश्न के साथ बार्ज करने के लिए खेद है क्योंकि यह एक ही विषय के साथ है। विपरीत करने का कोई तरीका है। मेरे पास एक प्रकार की आईडी के साथ एक टेबल है। यह खतरनाक रूप से बड़ा हो रहा है और मैं सोच रहा हूं कि इसे लंबे समय तक बदलने का कोई तरीका है या नहीं? (इकाई फ्रैमवर्क सीएफ 6।1) – hjavaher