实体框架是否可以将对象属性从/到字符串(反)序列化

本文关键字:字符串 序列化 属性 是否 框架 对象 实体 | 更新日期: 2024-10-31 12:09:54

我将使用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;
    }
}

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

实体框架是否可以将对象属性从/到字符串(反)序列化

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

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

一个

表示年份(可为空),一个表示月,一个表示日。

这样,您仍然可以从数据库中排序、分组等,并使用类中的值根据需要进行组合和显示。