【问题标题】:How to do property type conversion in EF 4.1 Code First如何在 EF 4.1 Code First 中进行属性类型转换
【发布时间】:2011-06-14 15:04:47
【问题描述】:

我想从现有的 SQL 数据库模式创建 EF 4.1 Code first 模型,我想知道是否可以对属性数据进行一些类型转换。

例如,我有一个现有的表“Foo”,其中包含这样的字段:

isTrue char(1) 'valid values are "Y" or "N"

在我的 EF 4.1 Code First 模型中,我想将此字段转换为布尔类型,例如:

public class Foo
{
    public bool isTrue { get; set; }  
}

通过扩展 DBContext 或在模型或 EntityTypeConfiguration 子类中添加额外代码,这是否可能在 EF 4.1 Code First 中实现?如果是的话,有人可以给我一个链接或一些关于如何做的文档吗?目前无法重构数据库字段。

【问题讨论】:

    标签: entity-framework-4.1 ef-code-first


    【解决方案1】:

    可以使用公共的非映射字段,它使用内部字段,然后您可以先使用代码保存和检索并在此处进行映射。这需要针对需要转换的每个字段完成,当然,也需要使用辅助方法进行简化

    internal string YesNo { get; set; }
    
    private bool _bYesNo;
    [NotMapped]
    public bool bYesNo
    {
      get{return (YesNo == "Y") ? true : false;}
      set{_bYesNo = value;YesNo = (bYesNo) ? "Y" : "N";}
    }
    

    【讨论】:

    • 我打算给你一个投票,然后我看到了匈牙利符号。平局。 :p
    【解决方案2】:

    无法让 EF 进行转换。

    一种可能的解决方法是让 EF 忽略 bool 属性,并使用将true 转换为"Y"false 转换为"N" 的包装器属性。


    如果您通常需要这种灵活性,我建议您研究更成熟的框架。

    例如,NHibernate 通过将 YesNo 指定为映射类型,开箱即用地支持此要求。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,下面的解决方案对我来说效果很好!!

      Entity Framework and Oracle Boolean

      在我的代码中,表字段看起来就像一个普通的布尔值,但在数据库中它是一个 char(1):EF 模型会将其转换为“Y”或“N”并将其保存到数据库中。 我也对 Guid 执行相同的技巧转换为 char(36)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        相关资源
        最近更新 更多