2011-07-01 5 views
10

Antecedentes:RIA/EF4 Entidad de propiedad asignada a NO nvarchar NULL - cadena vacía

  • Entity Framework 4
  • servicios de Silverlight 4
  • RIA
  • Servidor MSSQL 2008

Tengo una entidad que tiene una propiedad de cadena llamada Descripción.

En la base de datos se asigna al NOT NULL NVARCHAR(200).

Problema:

Cuando trato de insertar una nueva fila de esa entidad, esto es lo que hago:

MyExampleEntity entity = new MyExampleEntity() 
{ 
    Name = "example", 
    Description = ""  // NOTE THIS LINE! 
}; 

DatabaseContext db = new DatabaseContext(); 
db.MyExampleEntities.Add(entity); 
db.SubmitChanges(); 

Esto, sin embargo, provoca una excepción diciendo "The Description field is required."

Pregunta:

¿No debería ser el "vacío" string "be simplemente that - una cadena con cero caracteres?

que solo creen Description = null deben ser tratados como proporcionar ningún valor.

  • ¿Por qué mi cadena, que tiene un valor (aunque su longitud es 0), se considera como si hubiera omitido el valor?
  • ¿A qué nivel ocurre esta conversión? En RIA, en EF o en MSSQL?
  • ¿Hay alguna manera de hacer que una descripción tenga un valor de longitud cero cuando configuro el Description to "" y provoco una excepción cuando Description = null (sin ningún valor)?

Respuesta

9

Esto parece ser un síntoma de Entity Framework.

Related Article

Algunas anotaciones de datos se pueden utilizar para superar este:

[MetadataType(typeof(Report_META))] 
    public partial class Report 
    { 
    } 

    public partial class Report_META 
    { 
     [Required(AllowEmptyStrings = true)] 
     [DisplayFormat(ConvertEmptyStringToNull = false)] 
     public object Note { get; set; } 
    } 
+0

Funciona, gracias. –

+1

Tenga en cuenta que el atributo '[Required]' puede colisionar con las reglas de FluentValidation si las usa, ya que éstas también pueden agregar el atributo y solo puede tener una instancia del atributo a la vez ([http: // stackoverflow.com/a/5552237/1454265](http://stackoverflow.com/a/5552237/1454265)). Pude sortear esto y permitir cadenas vacías al descartar el atributo '[Required]' de la clase MetadataType y agregar una regla condicional a la validación: 'RuleFor (x => x.Field) .Etc (...) .When (x =>! String.IsNullOrWhitespace (x.Field); ' – user1454265

Cuestiones relacionadas