我将使用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;
}
}
现在我想要一个Car
- 表格,其中一个名为Color
的列会自动(通过一些魔法)在代码中变成CarColor
...是否有办法?使Color
属性(和其他)成为string
会破坏我的应用程序的整个设计,因为每个属性都是一个复杂类型,因为它有一些解析逻辑,允许值等等。我想要它是一致的(一切都是复杂的类型),而不是混合字符串和类以及其他类型。
答案 0 :(得分:0)
恕我直言,您可能希望EF属性为DateTime,只需在UI中进行转换即可。这样,您可以绑定到正确的数据库日期列,并能够进行所有排序和查询,如果使用您的方法将是不可能的。
答案 1 :(得分:0)
您可以单独存储日期字段。
一年一年(可空),一个月,一个一天。
这样,你仍然可以从数据库中对它进行排序,分组等,并使用你班级中的值来组合和显示你想要的。