सब कुछ आप DataAnnotations के साथ कॉन्फ़िगर कर सकते हैं धाराप्रवाह एपीआई के साथ भी संभव है। उल्टा सच नहीं है। इसलिए, कॉन्फ़िगरेशन विकल्पों और लचीलेपन के दृष्टिकोण से धाराप्रवाह एपीआई "बेहतर" है।
कॉन्फ़िगरेशन उदाहरण (निश्चित रूप से पूरी सूची नहीं) जो कि धाराप्रवाह एपीआई में संभव हैं, लेकिन DataAnnotations (जहां तक मैं देख सकता हूं) के साथ नहीं:
कैस्केडिंग डिलीट को बंद करें:
.WillCascadeOnDelete(false)
डेटाबेस में विदेशी कुंजी कॉलम नाम निर्दिष्ट करें जब कुंजी आपके ऑब्जेक्ट मॉडल में उजागर नहीं होती है:
.Map(conf => conf.MapKey("MyForeignKeyID"))
रिश्तों की बारीक बारीक ट्यूनिंग, विशेषकर उन सभी मामलों में जहां एक एसोसिएशन का केवल एक पक्ष वस्तु मॉडल में उजागर होता है:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
,WithRequiredPrincipal(...)
ऑब्जेक्ट मॉडल और डेटाबेस तालिकाओं (तालिका-प्रति-पदानुक्रम, तालिका-प्रति-प्रकार, तालिका-प्रति-कंक्रीट-कक्षा) के बीच विरासत मानचित्रण की विशिष्टता:
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
संपादित करें: Microsoft धाराप्रवाह एपीआई को "उन्नत सुविधा" ( यहां से उद्धरण ) के रूप में मानता है :
धाराप्रवाह एपीआई को एक अधिक उन्नत सुविधा माना जाता है और हम डेटा एनोटेशन का उपयोग करने की अनुशंसा करेंगे जब तक कि आपकी आवश्यकताओं को धाराप्रवाह एपीआई का उपयोग करने की आवश्यकता न हो।
लेकिन मेरी राय में आप DataAnnotations की सीमाओं तक बहुत जल्दी (शायद बेहद सरल वस्तु मॉडल को छोड़कर) पहुंच जाते हैं। यदि आप अपने मॉडल को DataAnnotations के साथ ठीक से ट्यून नहीं कर सकते हैं, तो आपका अंतिम उपाय डिफ़ॉल्ट मानचित्रण सम्मेलनों का पालन करना है (उन नियमों के अनुसार अपने गुणों का नामकरण करके)। वर्तमान में आप सम्मेलनों को अधिलेखित नहीं कर सकते हैं (केवल उन्हें अक्षम करें; एमएस भविष्य ईएफ रिलीज में सम्मेलनों के लिए कॉन्फ़िगरेशन विकल्प देने की घोषणा की)। लेकिन अगर आप अपने ऑब्जेक्ट मॉडल को परिभाषित करते समय मानचित्रण सम्मेलनों से मजबूर नहीं होना चाहते हैं, तो आपका एकमात्र विकल्प धाराप्रवाह एपीआई है।
धाराप्रवाह एपीआई सीखना लगभग एक चाहिए, DataAnnotations सरल अनुप्रयोगों के लिए एक अच्छा है।