2013-12-10 3 views
2

Я использую инфраструктуру сущности 4.3 в моем приложении ASP.NET MVC, а столбец NOT NULL в моей таблице базы данных может содержать пять пробелов. Когда я извлекаю данные из базы данных, отображаемое свойство в моей сущности всегда является String.Empty и не содержит пяти пробелов. Как настроить инфраструктуру сущности для сохранения пробелов?Сохраните пустую строку из базы данных

+0

Какой тип данных является полем точно? –

+0

Ситуация, которую вы описываете, кажется странной. Если в вашей базе данных имеется 5 пробелов, вы должны получить 5 пробелов из базы данных. – Silvermind

+0

Свойство в отображаемом объекте является строкой. Поле базы данных - _CHAR (5 BYTE) _. База данных - это Oracle. – soema

ответ

0

Я нашел обходной путь, в настоящее время. Это не идеально, но на данный момент вполне нормально. Я установил свойство в свой * .edmx-файл для частного сеттера и getter, добавив новое свойство в частичную декларацию класса, там я управляю значением. Если задано пустая строка '', она должна быть строкой с пятью пробелами (из-за фиксированной длины), и я могу ее обработать.

private string blankValue; // From *.edmx-File 
    public string BlankValue 
    { 
     get 
     { 
      return string.Equals(this.blankValue, "") ? "  " : this.blankValue; 
     } 
     set 
     { 
      if (value == "") 
       this.blankValue= "  "; 
      else 
       this.blankValue= value; 
     } 
    } 
0

Я думаю, попробуйте сравнить значение вашего свойства с явной пустой строкой. Пример: myProperty == ""

+0

Хм, я использую метод Database-First Approach, и я не могу проверить значение свойства, когда он установлен из ef, или что вы имеете в виду именно? – soema

0

Я не уверен, что ваша проблема полностью связана с сущностью. Я думаю, что база данных может обрабатывать поле char(5), которое содержит только пустое пространство способами, которых вы не ожидаете.

Попробуйте этот тест. Я побежал в шахту Sql Server, но вы должны быть в состоянии сделать эквивалент в Oracle:

CREATE TABLE dbo.Table_1 
    (
    ID int NOT NULL IDENTITY (1, 1), 
    Name char(5) NOT NULL 
    ) ON [PRIMARY] 
GO 
ALTER TABLE dbo.Table_1 ADD CONSTRAINT 
    PK_Table_1 PRIMARY KEY CLUSTERED 
    (
    ID 
    ) 

GO 

DELETE FROM table_1 

INSERT dbo.table_1 (name) 
    VALUES ('11111') 

INSERT dbo.table_1 (name) 
    VALUES ('  ') 

INSERT dbo.table_1 (name) 
    VALUES ('2 ') 

UPDATE dbo.table_1 
SET name = REPLACE(name, '1', ' ') 

SELECT 
    LEN(name) 
FROM dbo.table_1 -- 0, 0, 1 - you might have expected 5, 5, 5 

SELECT 
    COUNT(*) 
FROM dbo.table_1 
WHERE name = ' ' -- 2 as you might expect...but 


SELECT 
    COUNT(*) 
FROM dbo.table_1 
WHERE name = '' -- 2! you might not expect that 
        -- you'd get the same result with 
        -- any string containing only whitespace 

Ссылка

LEN function not including trailing spaces in SQL Server

+0

Я проверил его, и он работает, как я ожидаю, что он сработает. 'Length (name)' return 5, даже если значение этого столбца '' ''. Таким образом, существует большая разница между SQL Server и Oracle. – soema

Смежные вопросы