2012-10-12 16 views
10

Desidero definire gli attributi [Required] in un tipo complesso in Entity Framework. Ad esempio, ho un'entità Customer con un Address facoltativo. L'entità indirizzo ha una proprietà PostCode obbligatoria.Proprietà richieste su tipi complessi di Entity Framework facoltativi

[ComplexType] 
public class Address { 
    public string Address1 { get; set; } 
    [Required] 
    public string PostCode { get; set; } 
} 

public class Customer { 
    public int CustomerId {get;set;} 
    public Address Address {get;set;} 
} 

Non voglio per memorizzare il mio tipo complesso come un'entità separata (non sto realtà usando Indirizzo, questo solo un esempio semplice del problema). Non posso lasciare Customer.Address nulla, perché questo dà l'errore:

Null value for non-nullable member. Member: 'Address'.

Se fornisco un'entità Indirizzo vuoto, la convalida non riesce sul campo PostCode a causa del l'attributo richiesto.

Esiste un modo per raggiungere questo obiettivo? Sto usando EF5/NET4.5.

risposta

8

Non è possibile con un tipo complesso. Dovrai creare un'entità indirizzo se vuoi che sia annullabile.

Ciò che EF farà con un tipo complesso è mappare le proprietà alla stessa tabella, che suona come si intendeva.

A causa di ciò - il vostro schema per il tuo esempio sarebbe simile a questa:

enter image description here

Con una colonna non annullabile per Address_PostCode, dato che non è valida nel database non c'è un modo per EF per crea la riga, senza che l'oggetto abbia un indirizzo e un codice postale.

+0

Speravo davvero di farlo senza un'entità diversa. Suppongo che dovrò fare la convalida un po 'diversamente. Grazie per aver confermato i miei sospetti comunque! – Richard

+0

Questa è una caratteristica davvero negativa di EF. Utilizzando la riflessione su un oggetto Address, EF può facilmente capire quali colonne creare sulla creazione di una tabella. Non ha bisogno di avere un'istanza di Address dall'entità per risolverlo. E sulla creazione/aggiornamento di entità, se la proprietà ComplexType era nulla, cosa c'è di così difficile nell'impostare quelle colonne nel database in null? Questa dovrebbe essere una semplice aggiunta alla prossima versione di EF IMO. – Ibraheem

Problemi correlati