是否可以使用Entity Framework(de)将对象属性从/串行化为字符串?

时间:2015-03-07 12:56:18

标签: c# entity-framework ef-code-first

我将使用Entity Framework和代码优先方法创建一些表。但是我的一些类具有复杂的属性,如:

public class Car
{
    public ComplexDate DateBought { get; set; }
}

其中ComplexDate是:

public class ComplexDate
{
    public int? Year { get; set; } // Notice the optional Year.
    public string Month { get; set; }
    public int Day { get; set; }
}

可以解析27AUG27AUG15

等值

我可以以某种方式配置我的CarComplexDate,以便我可以将其序列化为string或从string反序列化吗?我想在数据库中有一个名为DateBought的列,但在代码中我希望我可以使用ComplexDate类型,并能够解析存储在数据库中的值。#

重要:

我还有其他一些不是日期的复杂属性,但是可解析,我想将它们存储为字符串,而不是更多的表/列。它会使数据库过度规范化。我想我不需要它。


更新:

这是我的意思的另一个例子:

public class Car
{
    public CarColor Color { get; set; }
}


public class CarColor
{
    private string _value;

    // ...more code (ctr, parse etc.)

    public override string ToString()
    {
        return _value;
    }
}

现在我想要一个Car - 表格,其中一个名为Color的列会自动(通过一些魔法)在代码中变成CarColor ...是否有办法?使Color属性(和其他)成为string会破坏我的应用程序的整个设计,因为每个属性都是一个复杂类型,因为它有一些解析逻辑,允许值等等。我想要它是一致的(一切都是复杂的类型),而不是混合字符串和类以及其他类型。

2 个答案:

答案 0 :(得分:0)

恕我直言,您可能希望EF属性为DateTime,只需在UI中进行转换即可。这样,您可以绑定到正确的数据库日期列,并能够进行所有排序和查询,如果使用您的方法将是不可能的。

答案 1 :(得分:0)

您可以单独存储日期字段。

一年一年(可空),一个月,一个一天。

这样,你仍然可以从数据库中对它进行排序,分组等,并使用你班级中的值来组合和显示你想要的。