Сопоставление пользовательских POCO в Entity Framework 4 - PullRequest
2 голосов
/ 17 июня 2010

Итак, у меня есть небольшая проблема с преобразованием строки в логическое значение, когда EF отображается на мой POCO. Я создал пользовательские POCO, и у меня есть логическое свойство под названием «IsActive». Но в базе данных столбец таблицы «IsActive», который сопоставляется со свойством POCOs, является строкой. Это либо «Y», либо «N».

EF это не нравится, поэтому мне интересно, есть ли способ сказать ему преобразовать строку в логическое значение с помощью специального метода ?? Спасибо!

1 Ответ

1 голос
/ 18 июня 2010

Сам не проверял. 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 };
...