12

Mam klasy, który wygląda tak:Entity Framework Migracje nie obejmują DefaultValue adnotacji danych (EF5RC)

[Table("Subscribers", Schema = "gligoran")] 
public class Subscriber 
{ 
    [Key] 
    public string Email { get; set; } 

    [Required] 
    [DefaultValue(true)] 
    public bool Enabled { get; set; } 
} 

Przy tworzeniu migracji włączenie tej klasy I otrzymujemy:

public partial class AddSubscriberClass : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "gligoran.Subscribers", 
      c => new 
       { 
        Email = c.String(nullable: false, maxLength: 128), 
        Enabled = c.Boolean(nullable: false), 
       }) 
      .PrimaryKey(t => t.Email); 

    } 

    public override void Down() 
    { 
     DropTable("gligoran.Subscribers"); 
    } 
} 

Chciałbym linię Enabled wyglądać tak:

Enabled = c.Boolean(nullable: false, defaultValue: true), 

oczywiście mogę to zrobić sam, b ut Po prostu pytam, czy istnieje sposób, aby Entity Framework zrobił to automatycznie.

Używam najnowszego Entity Framework 5 RC (5.0.0-rc.net40).

Odpowiedz

10

EF w ogóle nie używa atrybutu DefaultValue = nie jest częścią modelu, więc migracje go nie widzą. Możesz zaproponować obsługę tej adnotacji pod numerem Data UserVoice.

+0

Domyślam się, że ręczna jest jedyna. Dziękujemy za link UserVoice. Mam dla nich kilka pomysłów. – gligoran

+2

Właściwie dzisiaj MS opublikowało [EF jako open source] (http://entityframework.codeplex.com/), dzięki czemu można nawet spróbować samemu;) –

+0

Nice! Szukałem tego drugiego dnia i doszedłem do wniosku, że to nie jest otwarte. Podoba mi się nowa polityka otwarta (ish) firmy Microsoft. – gligoran

6

Jako dodatek do komentarza Ladislava. Który jest poprawny. nie możesz tego zrobić w modelu. JEŚLI chciałeś użyć migracji opartej na kodzie. Tj. Używając komendy PM Add-Migration/Update Database, to podejście wprowadza generowaną klasę do procesu. Wtedy możesz mieć wartości domyślne. Zobacz klasy, które wyprowadzają z DBMigrations. zobacz http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigration.addcolumn%28v=vs.103%29.aspx Możesz zdefiniować wyrażenia Lamda dla budowniczych kolumn. Pozwala to na ustawienia domyślne.

namespace MigrationsDemo.Migrations 
{ 
    using System; 
    using System.Data.Entity.Migrations; 

public partial class SomeClassThatisATable : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("MyTable", "MyColumn", c => c.String(defaultvalue:"Mydefault" )); 
    }