【问题标题】:String replace on select with Entity Framework使用实体框架选择字符串替换
【发布时间】:2015-11-03 21:29:37
【问题描述】:

我有一个无法修改的 SQL Server 数据源(我不是 dbo)。我使用 Entity Framework 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

但我希望查询结果是:

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

有人可以指出正确的方向吗?提前致谢

【问题讨论】:

    标签: c# entity-framework replace character-encoding ef-model-first


    【解决方案1】:

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

    这意味着将所有对“名称”的引用替换为“正确名称”。

    代码优先:

    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 标记阻止属性删除?
    • 由于它是模型优先的,您可以使用部分类(“public partial class Customer { ... }”)在单独的文件中添加“CorrectName”属性。 NotMapped 可能只需要代码优先 - 我不确定模型优先的后果,抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2014-08-31
    相关资源
    最近更新 更多