Entity framework 将占位符值映射为 null

Entity framework map placeholder value to null

在遗留数据库中,NULL 值有时存储为字符串 NULL and/or "x".

如何告诉 EF 我希望它自动将那些 "placeholder values" 转换为 NULL

更新:
我想通过两次使用相同的 属性 来避免模型中的歧义/意外复杂性。 (如果人们可以 get/set LegacyColumn,他们会的,抽象被打破了)

您可以基于现有的 属性 创建一个新的 属性,该 属性 未映射到数据库并执行所需的转换。假设列名为 Foo 您可以使用此代码:

[Column("Foo")]
public String FooWithWeirdNullValues { get; set; }

[NotMapped]
public String Foo {
  get {
    return FooWithWeirdNullValues == "NULL" || FooWithWeirdNullValues == "x"
      ? null : FooWithWeirdNullValues;
  }
  set { FooWithWeirdNullValues = value; }
}

然后在您的代码中使用未映射的 属性 访问 Foo 列的值。

您可能想为 FooWithWeirdNullValues 选择另一个名称,例如LegacyFoo 或其他。您可以选择任何名称,只要您使用 Column 属性将其映射到数据库中的正确列即可。

如果需要,您可以将 FooWithWeirdNullValues 设为私有,以免污染您的模型。这需要对 DbContext 进行一些更改,如 an answer on Stack Overflow on how to map private properties using code first.

中所述