EF公约来管理实体价值,这是可能的吗

本文关键字:管理 实体 EF | 更新日期: 2023-09-27 18:19:46

我知道我们可以使用约定来管理EF处理元数据的方式,我想知道是否可以使用一种约定来更改实体值,例如:我有一个现有的数据库,所有varchar的列都在末尾填充了空格,当我选择实体时,是否可以修剪所有字符串值?

EF公约来管理实体价值,这是可能的吗

有一个现有的数据库,并且varchar的所有列都在末尾填充了空格,当我选择实体时,是否可以修剪所有字符串值?

是的,您可以修改*.tt文件(实体框架文件之一,用于生成实体)。

我要修剪和空字符串的代码(替换*.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)));
    }
}