2012-10-12 25 views
10

quiero definir [Required] atributos de un tipo complejo en el marco de la entidad. Por ejemplo, tengo una entidad Customer con un Address opcional. La entidad de dirección tiene una propiedad PostCode requerida.propiedades requeridas en tipos complejos opcionales de Entity Framework

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

NO quiero para almacenar mi tipo complejo como una entidad separada (no estoy realmente través de la dirección, esto sólo una ilustración sencilla del problema). No puedo dejar cliente.Direccion nula, ya que esto da el error:

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

Si yo proporciono una entidad de direcciones vacía, falla la validación en el campo Código Postal debido a los atributos requeridos.

¿Hay alguna manera de lograr esto? Estoy usando EF5/NET4.5.

Respuesta

8

No es posible con un tipo complejo. Tendrá que crear una entidad de Dirección si quiere que sea nulable.

Lo EF va a hacer con un tipo complejo es el mapa de las propiedades a la misma mesa - lo que suena como que has previsto.

Debido a que - su esquema por su ejemplo sería el siguiente:

enter image description here

Con una columna no anulable por Address_PostCode, ya que no es válido en la base de datos no es una forma de EF para crea la fila, sin que tu objeto tenga una dirección y un código postal.

+0

Realmente esperaba hacer esto sin una entidad diferente. Supongo que tendré que hacer una validación un poco diferente. Gracias por confirmar mis sospechas de todos modos! – Richard

+0

Esta es una característica realmente mala de EF. Al usar la reflexión en un objeto Address, EF puede calcular fácilmente qué columnas crear en la creación de la tabla. No necesita tener una instancia de Dirección de la entidad para resolverlo. Y en la creación/actualización de entidades, si la propiedad ComplexType era nula, ¿qué tiene de difícil establecer nulas esas columnas en la base de datos? Esta debería ser una característica fácil de agregar a la próxima versión de EF IMO. – Ibraheem

Cuestiones relacionadas