实体框架是否可以将对象属性从/到字符串(反)序列化
本文关键字:字符串 序列化 属性 是否 框架 对象 实体 | 更新日期: 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; }
}
并且可以解析27AUG
或27AUG15
等值
我可以以某种方式配置我的Car
或ComplexDate
,以便我可以将其序列化为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 中进行转换。这样,您可以绑定到适当的数据库日期列,并能够执行所有排序和查询,如果使用您的方法,这将是不可能的。
您可以单独存储日期字段。
一个表示年份(可为空),一个表示月,一个表示日。
这样,您仍然可以从数据库中排序、分组等,并使用类中的值根据需要进行组合和显示。