2013-11-25 10 views
25

में मैं कैसे bool संपत्ति के लिए EntityFramework कोड पहले FluentAPI का उपयोग कर डिफ़ॉल्ट मान सेट कर सकते हैं?EntityFramework कोड पहले FluentAPI DefaultValue EF6.X

कुछ की तरह:

Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1); 
+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/20136504/how-can-set-a-default-value- [इकाई की रूपरेखा 6 संहिता सबसे पहले? के साथ एक डिफ़ॉल्ट मान बाधा सेट कर सकते हैं कैसे] बाधा-साथ-इकाई-ढांचे -6-कोड-प्रथम) – Colin

+0

इस मुद्दे के लिए कुछ प्रकार का समाधान होना चाहिए, न केवल सरल "नहीं"। मैं सभी संभावित समाधानों की बात कर रहा हूं। –

+1

क्षमा करें, मुझे यह एहसास नहीं हुआ था। मैंने सोचा था कि आप मूर्ख संपत्ति के लिए EntityFramework Code First FluentAPI का उपयोग करके डिफ़ॉल्ट मान को सेट करने के तरीके की तलाश में थे। मेरे बारे में कितना मूर्ख ;-) – Colin

उत्तर

8

मैं एक धाराप्रवाह तरीके के बारे में यकीन नहीं है, लेकिन आप बस एक parameterless निर्माता में गुण सेट कर सकते हैं ...

public class MyTable 
{ 
    public MyTable() 
    { 
     CanSetDefault = true; 
    } 

    public bool CanSetDefault {get; set; } 
} 

अद्यतन

एक त्वरित गूगल चलता है कि यह धाराप्रवाह एपीआई का उपयोग कर संभव नहीं है ...
http://social.msdn.microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-and-default-values?forum=adonetefx

+2

अच्छा सुझाव है, लेकिन डेटटाइम के लिए काम नहीं करता है.अब जिसे बनाया गया फ़ील्ड के लिए उपयोग किया जाता है, क्योंकि जब क्लास इंस्टेंस को डालने के दौरान बनाया जाता है तब से घड़ी की बहाव होगी। यह लेखापरीक्षा लॉग के आधार पर कुछ हार्ड-टू-डीबग कोड का कारण बन जाएगा। –

+0

यह अब EF7 के लिए पर काम किया और पूर्व-रिलीज़ में उपलब्ध किया जा रहा है https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/2929682-support-database-default-values-in -कोड-पहले –

+0

यह केवल इसके साथ जोड़े गए प्रविष्टियों के लिए काम करता है। यदि आपके पास मौजूदा प्रविष्टियां हैं, और आप अपनी स्कीमा में एक कॉलम जोड़ रहे हैं, तो यह काम नहीं करता है। – Warrick

1

के बाद से इस तरह के एफई मूलभूत मूल्यों और विदेशी कुंजी के रूप में अद्वितीय कुंजी के रूप में कार्य मैं की जरूरत है, नहीं है, हम NHibernate करने के लिए एफई से ORM बदलना होगा। ऐसा लगता है कि एनएचबीर्नेट के पास ईएफ 6.X की तुलना में अधिक कार्य हैं।

24

अच्छी खबर, कोड अब पहले इसका समर्थन करता है। उत्पन्न प्रवास के "ऊपर()" विधि में, निम्न सिंटैक्स के साथ एक डिफ़ॉल्ट निर्दिष्ट करें:

AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false)); 

MSDN for "AddColumn" method

+0

अधिक जानकारी के लिए लिंक? – joelmdev

+1

@joelmdev एमएसडीएन दस्तावेज – htxryan

+2

के लिए एक लिंक जोड़ा गया यह केवल एक अप माइग्रेशन है। ओपी पूछताछ के समय डिफ़ॉल्ट सेट कैसे सेट करने के लिए पूछ रहा है। पीछे के दृश्य, ईएफ पीओसीओ में प्रत्येक संपत्ति को सम्मिलित कथन में एक पूर्ण के रूप में मानचित्र करता है यदि सी # संपत्ति शून्य है। मूल्य प्रकारों के लिए, यह मान प्रकार डिफ़ॉल्ट मान डालता है। उपयोगी जानकारी, यद्यपि! –

1

यहाँ एक अन्य विकल्प अपने खुद के साथ डिफ़ॉल्ट SqlServerMigrationSqlGenerator वर्ग ओवरराइड करने के लिए है। फिर आप जेनरेट विधि (उदाहरण के लिए, डिफ़ॉल्ट मान) में होने वाली कुछ चीजों को इंजेक्ट कर सकते हैं। इसके साथ अच्छी चीजें यह है कि आप इसे अन्य अनुप्रयोगों में भी उपयोग कर सकते हैं क्योंकि यह बहुत सामान्य है। Here इस पर एक अच्छी व्याख्या है।

internal class CustomSqlServerMigrationSqlGenerator : SqlServerMigrationSqlGenerator 
{ 

    protected override void Generate(AddColumnOperation addColumnOperation) 
    { 
     SetCreatedUtcColumn(addColumnOperation.Column); 

     base.Generate(addColumnOperation); 
    } 

    protected override void Generate(CreateTableOperation createTableOperation) 
    { 
     SetCreatedUtcColumn(createTableOperation.Columns); 

     base.Generate(createTableOperation); 
    } 


    private static void SetCreatedUtcColumn(IEnumerable<ColumnModel> columns) 
    { 
     foreach (var columnModel in columns) 
     { 
      SetCreatedUtcColumn(columnModel); 
     } 
    } 

    private static void SetCreatedUtcColumn(PropertyModel column) 
    { 
     if (column.Name == "CreatedUtc") 
     { 
      column.DefaultValueSql = "GETUTCDATE()"; 
     } 
    } 


} 
की
+0

पूर्ण स्पष्टीकरण: https://andy.mehalick.com/2014/02/06/ef6-adding-a-created-datetime-column-automatically-with-code-first-migrations/ – jwatts1980

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