1

規則を使用して EF がメタデータを処理する方法を管理できることはわかっています。たとえば、ある種の規則を使用してエンティティ値を変更できるかどうかを知りたいです。既存のデータベースがあり、すべての varchar 列が入力されています。最後にスペースがある場合、エンティティを選択するときにすべての文字列値をトリムすることは可能ですか?

4

1 に答える 1

0

既存のデータベースがあり、すべての varchar の列が最後にスペースで埋められています。エンティティを選択するときにすべての文字列値をトリミングすることは可能ですか?

はい、*.tt ファイル (エンティティの生成に使用されるエンティティ フレームワーク ファイルの 1 つ) を変更できます。

トリミングするコードと null 文字列 (*.tt ファイルでその関数を置き換えます):

public string Property(EdmProperty edmProperty)
{       
    string typ = _typeMapper.GetTypeName(edmProperty.TypeUsage);

    if (typ == "string")
    {
        string prop = "_" + _code.Escape(edmProperty);
        return string.Format(
            CultureInfo.InvariantCulture,
            "\r\n\tprivate string " + prop + ";\r\n\t" +
            "{0} {1} {2} \r\n\t{{\t\t{3}{6} {4}{5} \t}}",
            Accessibility.ForProperty(edmProperty),
            _typeMapper.GetTypeName(edmProperty.TypeUsage),
            _code.Escape(edmProperty),
            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)),

            "\r\n\t\tset" +
            "\r\n\t\t{" + 
            "\r\n\t\t\t" + prop + " = String.IsNullOrWhiteSpace(value) ? null : value.Trim();" +
            "\r\n\t\t}" +
            "\r\n",

            "\r\n\t\tget" +
            "\r\n\t\t{" + 
            "\r\n\t\t\treturn " + prop + ";" +
            "\r\n\t\t}");
    }
    else
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            "\r\n\t{0} {1} {2} {{ {3}get; {4}set; }}",
            Accessibility.ForProperty(edmProperty),
            _typeMapper.GetTypeName(edmProperty.TypeUsage),
            _code.Escape(edmProperty),
            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
    }
}
于 2013-06-24T17:00:39.467 に答える