2013-11-25 17 views
25

Boole özelliği için EntityFramework Kodu First FluentAPI'yi kullanarak varsayılan değeri nasıl ayarlayabilirim?EntityFramework Kodu İlk FluentAPI DefaultValue, EF6.X

şey gibi:

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

olası yinelenen (http://stackoverflow.com/questions/20136504/how-can-set-a-default-value- [İdare Framework 6 Kod İlk? Ile varsayılan bir değer sınırlaması ayarlayabilirsiniz nasıl] kısıtlama-varlık-çerçeve-6-kod-ilk) – Colin

+0

Sadece basit "Hayır" değil, bu sorun için bir çeşit çözüm olmalı. Bütün olası çözümleri konuşuyorum. –

+1

Üzgünüm, bunu fark etmemiştim. Bool özelliği için EntityFramework Kodu First FluentAPI'yi kullanarak varsayılan değeri nasıl ayarlayacağınızı düşünmüştüm. Beni ne kadar aptalca ;-) – Colin

cevap

8

Ben akıcı yol hakkında emin değilim, ama sadece bir parametresiz yapıcı mülk ayarlayabilirsiniz ...

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

    public bool CanSetDefault {get; set; } 
} 

Güncelleme

Hızlı bir google, akıcı apiratörü kullanmanın mümkün olmadığına işaret eder.
http://social.msdn.microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-and-default-values?forum=adonetefx

+2

İyi öneri, ancak DateTime.Now için kullanılmaz. Oluşturulmadığı zaman sınıf örneğinin oluşturulduğu zamandan itibaren saat kayması olacak şekilde, oluşturulan alanlar için kullanılır. Bu, denetim günlüklerine dayanan bazı zor-hata ayıklama kodlarına yol açacaktır. –

+0

Şu anda EF7 için çalışıyor ve https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/2929682-support-database-default-values-in adresinde kullanıma sunuluyor -kod-ilk –

+0

Bu sadece bununla eklenen girişler için çalışır. Mevcut girişleriniz varsa ve şemanıza bir sütun ekliyorsanız, bu çalışmaz. – Warrick

1

EF, varsayılan değerler ve yabancı anahtarlar gibi benzersiz anahtar gibi ihtiyacım olan işlevlere sahip olmadığından, ORM'yi EF'den NHibernate'e değiştirmeliyiz. Bana göre, NHibernate'in EF 6.X'den daha fazla işlevi var.

24

İyi haber, kod şimdi bunu destekliyor. oluşturulan göç "Yukarı()" yönteminde, aşağıdaki sözdizimine sahip bir varsayılan belirtin:

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

MSDN for "AddColumn" method

+0

Daha fazla bilgi için bağlantı? – joelmdev

+1

@joelmdev MSDN belgelerine bir bağlantı eklendi – htxryan

+2

Bu yalnızca bir Geçiş'dir. OP, ekleme sırasında varsayılanların nasıl ayarlanacağını soruyor. Sahne arkasında, EF, C# özelliği boşsa, POCO'daki her özelliği Insert ifadesine NULL olarak eşler. Değer türleri için, değer türleri varsayılan değerini ekler. Faydalı bilgiler olsa! –

1

buraya Başka bir seçenek kendi varsayılan SqlServerMigrationSqlGenerator sınıf geçersiz etmektir. Sonra Generate yönteminde olmasını istediğiniz belirli şeyleri (örneğin, varsayılan değerler) enjekte edebilirsiniz. Bununla ilgili güzel şeyler, diğer uygulamalarda da oldukça genel olduğu için bunu kullanabilmeniz. Here bunun üzerinde iyi bir açıklama.

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()"; 
     } 
    } 


} 
ait
+0

Tam açıklama: https://andy.mehalick.com/2014/02/06/ef6-adding-a-created-datetime-column-automatically-with-code-first-migrations/ – jwatts1980