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.
中所述
在遗留数据库中,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.