在实体框架4中映射自定义POCO

时间:2010-06-17 19:26:09

标签: c# .net entity-framework entity

因此,当EF映射到我的POCO时,我将一个字符串转换为布尔值有一个小问题。我创建了自定义POCO,我有一个具有名为“IsActive”的布尔属性。但是,在数据库中,映射到POCOs属性的表列“IsActive”是一个字符串。它是'Y'或'N'。

EF不喜欢这个,所以我想知道是否有办法告诉它通过自定义方法将字符串转换为布尔值?谢谢!

1 个答案:

答案 0 :(得分:1)

我自己没有测试过。 http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

在edmx中创建复杂的类型定义。

<ComplexType Name="IsActiveWrapper" > 
          <Property Type="string" Name="Value" Nullable="false" /> 
</ComplexType>

创建复杂类型

public class IsActiveWrapper
{
    private bool isActive;

    public string Value
    {
        get
        {
            return isActive ? "Y" : "N";
        }

        set
        {
            isActive = "Y".Equals(value);
        }
    }

    public bool IsActive
    {
        get { return isActive; }
        set { isActive = value; }
    }

    public static implicit operator IsActiveWrapper(bool isActive)
    {
        return new IsActiveWrapper { IsActive = isActive };
    }

    public static implicit operator bool(IsActiveWrapper wrap)
    {
        if (wrap == null) return false;
        return wrap.IsActive;
    }
}

现在你可以做这样的事情

public class TestIsActive
{
    public virtual IsActiveWrapper IsActive { get; set; }
}
var test = new TestIsActive { IsActive = true };