保留数据库中的空字符串

时间:2013-12-10 16:01:12

标签: c# asp.net-mvc entity-framework

我在ASP.NET MVC应用程序中使用实体框架4.3,我的数据库表中的NOT NULL列可以包含五个空格。当我从数据库中检索数据时,我的实体中的映射属性总是String.Empty,并且不包含五个空格。如何配置实体框架以保留空白?

3 个答案:

答案 0 :(得分:0)

我认为尝试将属性的值与显式空字符串进行比较。例如:myProperty == ""

答案 1 :(得分: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

答案 2 :(得分:0)

我现在找到了解决方法。它并不完美,但目前还不错。我将* .edmx-File中的属性设置为私有setter,并在类的声明部分中获取新的属性,我控制该值。如果设置为空字符串'',它必须是一个包含五个空格的字符串(因为固定长度),我可以处理它。

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