C# 用实体框架替换select上的字符串

C# 用实体框架替换select上的字符串,c#,entity-framework,replace,character-encoding,ef-model-first,C#,Entity Framework,Replace,Character Encoding,Ef Model First,我有一个无法修改的SQL Server数据源(我不是dbo)。我首先使用实体框架6模型进行查询。一切都很好,除了我必须选择客户的名字,只有两个字符的差异 Datasource Wanted ============================= ¤ Ñ ¥ ñ MU¤OZ MUÑOZ Zu¥iga Zuñiga 所以。。

我有一个无法修改的SQL Server数据源(我不是dbo)。我首先使用实体框架6模型进行查询。一切都很好,除了我必须选择客户的名字,只有两个字符的差异

Datasource            Wanted
=============================
   ¤                    Ñ
   ¥                    ñ
  MU¤OZ               MUÑOZ
 Zu¥iga               Zuñiga
所以。。有一种透明的方法可以做到这一点吗?明显地您可以创建一个方法来替换,并在查询客户表时调用它。但是,我想要的是创建一个解决方案,该解决方案可以处理所有已经创建并将要编写的查询

我读到了关于实施

System.Data.Entity.Infrastructure.Interception.IDbCommandInterceptor
但不确定这是否正确

查询及其结果的示例

var aCostumer = db.costumers.Where(n=>n.idCostumer==someId).Select(n=>new{n.idCostumer,n.firstName,n.lastName}).FirstOrDefault();
结果 但我希望查询结果是:

idCostumer    firstName    lastName
===================================
   1             DAVID       MUÑOZ

有人能告诉我正确的方向吗?提前感谢

您可以向您的客户模型类添加一个属性,该属性进行替换,并且不会被映射或序列化

这只意味着将所有对“Name”的引用替换为“CorrectName”

先编码:

public class Customer
{
    // ...

    public string Name { get; set; }

    [NotMapped]
    public string CorrectName
    {
        get { return Name.Replace('¤', 'Ñ').Replace('¥', 'ñ'); }
        set { Name = value.Replace('Ñ', '¤').Replace('ñ', '¥'); }
    }

    // ...
}
// In a new file, so your changes don't get overwritten:
public partial class Customer
{
    public string CorrectName
    {
        get { return Name.Replace('¤', 'Ñ').Replace('¥', 'ñ'); }
        set { Name = value.Replace('Ñ', '¤').Replace('ñ', '¥'); }
    }
}
型号优先:

public class Customer
{
    // ...

    public string Name { get; set; }

    [NotMapped]
    public string CorrectName
    {
        get { return Name.Replace('¤', 'Ñ').Replace('¥', 'ñ'); }
        set { Name = value.Replace('Ñ', '¤').Replace('ñ', '¥'); }
    }

    // ...
}
// In a new file, so your changes don't get overwritten:
public partial class Customer
{
    public string CorrectName
    {
        get { return Name.Replace('¤', 'Ñ').Replace('¥', 'ñ'); }
        set { Name = value.Replace('Ñ', '¤').Replace('ñ', '¥'); }
    }
}

好的,让我试试,只是想澄清一下。。。如果你更新你的模型呢?NotMapped标记阻止属性删除?因为它首先是模型,所以可以使用分部类(“公共分部类客户{…}”)在单独的文件中添加“CorrectName”属性。NotMapped可能只需要代码优先-我不确定模型优先的后果,抱歉。