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

本文关键字:映射 null 占位符 框架 实体 | 更新日期: 2024-04-23 18:34:38

在传统数据库中,NULL值有时存储为字符串NULL和/或"x"。

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

更新
我想通过两次具有相同的属性来避免模型中的歧义/意外复杂性。(如果人们可以获得/设置LegacyColumn,他们会的,抽象就被破坏了)

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

您可以基于未映射到数据库并执行所需转换的现有属性创建一个新属性。假设列名为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进行一些更改,如Stack Overflow上关于如何首先使用代码映射私有属性的回答中所述。