2010-10-27 24 views
12

He estado buscando en Code First con Entity Framework CTP4 y puede usar ModelBuilder para construir sus columnas de tabla. ¿Hay alguna manera de establecer el valor predeterminado para una columna en la base de datos usando el ModelBuilder o algún otro mecanismo?Entity Framework Code First CTP4 Default Column Values?

¡Gracias!

+0

[sugerencia pertinente] (https://data.uservoice.com/forums/72025-entity-framework-feature -sugerencias/sugerencias/2929682-support-database-default-values-in-code-first). – tne

Respuesta

2

No se pudo encontrar una manera de agregar valor predeterminado distinto de edición manualy a través de editor de texto/aplicación Se trata de un error en el marco de la entidad ...

+0

¿Hay alguna manera de establecer el valor predeterminado pero no funciona, un error? ¿O solo falta esa característica en la versión actual? – Lukasz

+3

El hecho de que falta esa característica es el error ... – Tor

+0

Una característica que falta no se debe calificar como un error. –

36

estoy usando el constructor para establecer los valores por defecto. Nunca me ha fallado

public class Activity 
{ 
    [Required] 
    public DateTime AddedDate { get; set; } 

    public Activity() 
    { 
     AddedDate = DateTime.Now; 
    } 
} 
+0

Esta respuesta no está recibiendo suficiente amor. – Kjensen

+1

El único problema es que los valores predeterminados de DB son más eficientes. –

+0

por supuesto, pero hasta que se publique en el próximo lanzamiento de EF, eso hará el truco – Korayem

2

Ésta es mi manera, el establecimiento de propiedades importantes con private setters en un método de creación lugar mediante el constructor

Modelo

public class User 
{ 
    public static User Create(Action<User> init) 
    { 
     var user = new User(); 
     user.Guid = Guid.NewGuid(); 
     user.Since = DateTime.Now; 
     init(user); 
     return user; 
    } 

    public int UserID { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 
    public virtual ICollection<Widget> Widgets { get; set; } 

    [StringLength(50), Required] 
    public string Name { get; set; } 
    [EmailAddress, Required] 
    public string Email { get; set; } 
    [StringLength(255), Required] 
    public string Password { get; set; } 
    [StringLength(16), Required] 
    public string Salt { get; set; } 

    public DateTime Since { get; private set; } 
    public Guid Guid { get; private set; } 
} 

Creación de nuevo usuario

context.Users.Add(User.Create(c=> 
{ 
    c.Name = "User"; 
    c.Email = "[email protected]"; 
    c.Salt = salt; 
    c.Password = "mypass"; 
    c.Roles = new List<Role> { adminRole, userRole }; 
})); 
4

En el código generado para una migración, puede especificar un valor predeterminado para una columna:

AddColumn("users", "ReceiveSummaryEmail", c => c.Boolean(nullable: false, defaultValue: true)); 
Cuestiones relacionadas