2011-07-01 7 views
10

Tło:własności RIA/EF4 Podmiot mapowane do not null nvarchar - pusty ciąg

  • Entity Framework 4
  • usługi Silverlight 4
  • RIA
  • MSSQL Server 2008

Mam obiekt, który ma właściwość String o nazwie Opis.

W bazie danych mapuje się do NOT NULL NVARCHAR(200).

Problem:

Kiedy próbuję wstawić nowy wiersz tego podmiotu, to co mam zrobić:

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

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

To jednak powoduje wyjątek mówiący "The Description field is required."

Pytanie:

Nie powinien "pusty" ciąg "po prostu to - ciąg znaków zero znaków?

wierzę tylko Description = null należy traktować jako zapewnienie żadnej wartości.

  • Dlaczego mój ciąg ma wartość (chociaż ma długość 0), co oznacza, że ​​pominąłem wartość?
  • Na jakim poziomie odbywa się ta konwersja? Na RIA, na EF lub w MSSQL?
  • Czy istnieje sposób, aby opis miał zerową wartość po ustawieniu Description to "" i spowodować wyjątek, gdy Description = null (bez wartości)?

Odpowiedz

9

To wydaje się być objawem Entity Framework.

Related Article

Niektóre adnotacje danych mogą być wykorzystywane w celu przezwyciężenia tego:

[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

To działa, dzięki. –

+1

Należy zauważyć, że atrybut "[Wymagany]" może kolidować z regułami FluentValidation, jeśli ich używasz, ponieważ mogą one również dodawać atrybuty i można mieć tylko jedno wystąpienie atrybutu na raz ([http: // stackoverflow.com/a/5552237/1454265](http://stackoverflow.com/a/5552237/1454265)). Udało mi się obejść to i zezwolić na puste ciągi, upuszczając atrybut "[Wymagany]" z klasy MetadataType i dodając regułę warunkową do walidacji: 'RuleFor (x => x.Field) .Etc (...) .When (x =>! String.IsNullOrWhitespace (x.Field); ' – user1454265