2010-10-15 10 views
5

System.DateTime एसक्यूएल सर्वर की डेटटाइम की तुलना में मूल्यों की विस्तृत श्रृंखला ले सकता है। इसलिए कक्षा System.Data.SqlTypes.SqlDateTime है जो बाद में नकल करता है।इकाई फ्रेमवर्क और एसक्यूएलडेट टाइम ओवरफ्लो सर्वोत्तम प्रथाओं

परिणामस्वरूप मैं एसक्यूएलडेट टाइम चुनने के लिए इकाई फ्रेमवर्क की उम्मीद करता, लेकिन ऐसा नहीं हुआ।

तो मेरी सवाल कर रहे हैं ...

बीमा करने के लिए है कि आपके दिनांक समय मान समस्याओं का कारण नहीं होगा जब आप उन्हें अपने डेटाबेस के लिए बचाने की कोशिश सर्वोत्तम प्रथाओं क्या हैं?

क्या एसएफएलडेट टाइम का उपयोग करने के लिए ईएफ को मजबूर करने का कोई तरीका है?

उत्तर

4

वहाँ आप कर सकते हैं चीजों के एक नंबर है:

  • आप एसक्यूएल सर्वर 2008 या नए, आप डेटाबेस जो उसी तिथि सीमा के रूप में की पेशकश पर DATE या DATETIME2 डेटा प्रकार का उपयोग कर सकते उपयोग कर रहे हैं .NET के DateTime

  • यदि आप उन नए डेटा प्रकारों का उपयोग नहीं कर सकते हैं, तो यह आपके लिए आपके स्टोर फ़ील्ड पर कुछ जांच/सत्यापन को संभालने के लिए निर्भर करेगा, इससे पहले कि चीजें लगातार स्टोर में संग्रहीत हों। एफई EntityObject तरीके मान्य और वस्तुओं सहेजने की प्रक्रिया का दोहन करने के लिए बहुत सारी प्रदान करता है - एक दृष्टिकोण आप

1

हो सकता है कि यह एक पुराने धागा है, लेकिन मैं दूसरों के लिए इस पर अपना निष्कर्ष पोस्ट करेंगे:

Let का कहना है कि हम देव env है: एफई 5, CodeFirst, SqlCE 4.0:

public abstract class Entity : IEntity, IEquatable<Entity> 
{ 
public virtual int Id { get; protected set; } 
public virtual DateTime LastModified { get; set; } 

[DataType(DataType.Date)] 
public virtual DateTime CreatedOn { get; set; } 

[DataType(DataType.DateTime)] 
public virtual DateTime CreatedOn2 { get; set; } 

[DataType(DataType.Time)] 
public virtual DateTime CreatedOn3 { get; set; } 

public virtual DateTime CreatedOn4 { get; set; } 
} 

वाई वें इस तरह के एक कस्टम मैपिंग:

public EntityMapping() 
{ 
HasKey(e => e.Id); 
Property(e => e.Id); 
Property(e => e.LastModified).IsRequired().IsConcurrencyToken(); 
Property(e => e.CreatedOn).IsRequired(); 
Property(e => e.CreatedOn2).IsRequired(); 
Property(e => e.CreatedOn3).IsRequired(); 
Property(e => e.CreatedOn4).IsRequired(); 
} 

यह this पैदा करता है, जिसका अर्थ है कि हम अतिप्रवाह अपवाद होगा।

इस जबकि अभी भी एसक्यूएल सीई 4.0 के साथ काम करने के लिए मैपिंग बदलना:

Property(e => e.CreatedOn).IsRequired().HasColumnType("datetime2"); 
Property(e => e.CreatedOn2).IsRequired().HasColumnType("date"); 
Property(e => e.CreatedOn3).IsRequired().HasColumnType("date"); 
Property(e => e.CreatedOn4).IsRequired().HasColumnType("datetime2"); 

इस error देता है। एसक्यूएल सर्वर स्टैंडआर्ट 2012 में स्विचिंग समस्या को हल करने लगता है (यह निश्चित रूप से एक समाधान नहीं है - केवल प्रयोग के लिए)। बनाया गया SQL सर्वर स्कीमा this है।

मैं एसक्यूएल में एक विशेषज्ञ नहीं हूं लेकिन ऐसा लगता है कि SQL CE does not support these dates। विकास env के साथ समस्या। बाकी है। डेटटाइम को प्रतिस्थापित किया जा सकता है लेकिन यहां बहुत से रिफैक्टरिंग और tehere ला सकता है।

यह भी याद रखें कि SqlDateTime and DateTime are very different

समाधान जो मुझे अच्छा लगता है - कोड और प्रोजेक्ट लाइफसाइक्ल के लिए - स्थानीय डीबी और एसक्यूएल स्टैंडअर्ट के बीच स्विच करना है जैसा कि स्टैक ओवरफ्लो से ऊपर दिए गए लिंक में से एक द्वारा कस्टम फ्लुएंएपी मैपिंग सेटिंग्स के साथ मॉडल निर्माण या दोनों को बराबर करने के लिए किया गया है ।

सुरक्षा नेट के रूप में custom convention in EF पेश करना भी अच्छा लगता है।

यदि किसी के पास कोड के लिए और देव-उत्पादन दोनों के लिए एक बेहतर ऑल-राउंड समाधान है, तो इसे पोस्ट करें।

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

  • कोई संबंधित समस्या नहीं^_^