我想为我的主要实体维护一个版本号(例如 1.1、1.3、2.15 等)。我无法使用十进制来存储版本,因为我必须存储 1.1,如果我使用十进制,它将存储为 1.100。因此,我计划创建一个小型版本 Controller 类,它操纵版本号并根据需要返回主/次/完整号,并希望将其映射到数据库中的 varchar 列。
示例:
public class Item
{
public Guid Id {get;set;}
public string Name {get;set;}
**// I want to map this property with the varchar column in the database**
public Version Version {get;set;}
}
public class Version
{
public string FullVersion {get;set;}
public string Major {get;set;}
public string Minor {get;set;}
public void IncrementMinor()
{ // some logic }
public void IncrementMajor()
{ // some logic }
public override string ToString()
{
return FullVersion;
}
}
有什么建议吗?
最佳答案
如果您不将 Version
定义为实体(即在上下文中声明数据库集),则默认情况下它将存储为复杂类型。因此,如果您要存储 Item
实体,您将在数据库中看到以下字段:
Id
Name
Version_FullVersion
Version_Major
Version_Minor
您需要做的就是将主要和次要属性标记为未映射,并为完整版本属性提供漂亮的名称:
public class Version
{
[Column("Version")]
public string FullVersion
{
get { return String.Format("{0}.{1}", Major, Minor); }
set
{
var parts = value.Split('.');
Major = parts[0];
Minor = parts[1];
}
}
[NotMapped]
public string Major { get; set; }
[NotMapped]
public string Minor { get; set; }
// ...
}
这会生成三列:
Id
Name
Version
顺便说一句,考虑对主要版本和次要版本字段使用整数类型。
另一个选项 - 不映射版本属性并添加属性来存储字符串版本值:
public class Item
{
public Guid Id { get; set; }
public string Name { get; set; }
[NotMapped]
public Version Version { get; set; }
[Column("Version")]
public string VersionValue
{
get { return Version != null ? Version.ToString() : null; }
set { Version = Version.Parse(value); }
}
}
并将 Parse
方法添加到您的 Version
类(这将从版本字符串创建版本实例)。
关于c# - 将自定义实体映射到数据库列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17418836/