gpt4 book ai didi

c# - 将自定义实体映射到数据库列

转载 作者:行者123 更新时间:2023-11-30 20:56:40 30 4
gpt4 key购买 nike

我想为我的主要实体维护一个版本号(例如 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 定义为实体(即在您的上下文中声明 db 集),则默认情况下它将存储为复杂类型。因此,如果您要存储 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com