实体框架将占位符值映射为null

时间:2015-02-12 13:05:49

标签: c# entity-framework entity-framework-6

在旧数据库中,NULL值有时存储为字符串NULL和/或“x”。

如何告诉EF我希望它自动将这些“占位符值”转换为NULL

更新
我希望通过两次使用相同的属性来避免模型中的模糊/偶然复杂性。 (如果人们可以获得/设置LegacyColumn,他们就会和抽象被破坏了)

1 个答案:

答案 0 :(得分:3)

您可以根据未映射到数据库并执行所需转换的现有属性创建新属性。假设该列名为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中所述。