2010-10-27 16 views
12

Ho esaminato il codice prima con Entity Framework CTP4 ed è possibile utilizzare ModelBuilder per creare le colonne della tabella. C'è un modo per impostare il valore predefinito per una colonna nel database usando ModelBuilder o qualche altro meccanismo?Codice quadro entità Primo valore colonna predefinito CTP4?

Grazie!

+0

[suggerimento rilevanti] (https://data.uservoice.com/forums/72025-entity-framework-feature -Suggerimenti/suggerimenti/2929682-supporto-Database-default-valori-in-codice-prima). – tne

risposta

2

non riusciva a trovare un modo per aggiungere valore predefinito diverso da modificare manualy tramite editor di testo/applicazione Si tratta di un bug nel Entity Framework ...

+0

C'è un modo per impostare il valore predefinito ma non funziona, un bug? O manca del tutto quella caratteristica nella versione attuale? – Lukasz

+3

Il fatto che manchi questa funzionalità è l'errore ... – Tor

+0

Una funzionalità mancante non dovrebbe essere considerata un bug. –

36

Sto usando il costruttore per impostare i valori di default. Non mi ha mai fallito

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

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

Questa risposta non sta ottenendo abbastanza amore. – Kjensen

+1

L'unico problema è che i valori predefiniti del DB sono più efficienti. –

+0

naturalmente, ma fino a quando non verrà rilasciato nella prossima versione di EF, ciò comporterà il trucco – Korayem

2

Questo è il mio modo, l'impostazione importanti proprietà con private setters in un metodo di creazione invece tramite il costruttore

Modello

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; } 
} 

Creazione di nuovi utenti

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

Nel codice generato per una migrazione, è possibile specificare un valore predefinito per una colonna:

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