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

标签 c# entity-framework ef-code-first

我想为我的主要实体维护一个版本号(例如 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/

相关文章:

c# - 如何在 Entity Framework 中映射 CONTAINSTABLE 函数(代码优先)?

c# - RestSharp POST 请求从 cURL 请求转换

c# - C++ 到 C#,C# 到带有外部 DLL 的 C++,DLL 未找到异常

c# - 动态单选按钮 CheckedChanged 事件不会触发

.net - Entity Framework 4.3.1 迁移始终调用默认构造函数并忽略连接字符串

entity-framework - 如何在没有 HttpContext 的情况下获取 Entity Framework 种子方法中的文件路径(从包管理器命令执行)

c# - 使用 StoryQ 修改或配置输出

c# - 使用字符串操作和正则表达式的 LINQ 查询结果

entity-framework - 向所有请求 EF6 添加 Where 条件

entity-framework - "Error getting value from ' MyEntity ' on ' System.Data.Entity.DynamicProxies...”